91³Ô¹ÏÍø

Watch CBS News

Detroit Tigers beat Kansas City Royals 2-1 for 5th straight win

Wenceel Pérez hit a go-ahead homer in the eighth inning and the Detroit Tigers won their fifth straight game, beating the Kansas City Royals 2-1 on Wednesday night.

Pérez entered the game in the eighth inning as a defensive replacement when Zach McKinstry left after a collision with Jac Caglianone at third base.

Pérez's first at-bat came as the leadoff hitter in the bottom of the eighth and he hit a 1-1 changeup from Eli Morgan (0-1) over the right-field fence for his first homer of the season.

Kyle Finnegan (1-0) got the win with 1 1/3 scoreless innings of relief and Kenley Jansen pitched the ninth for his fourth save.

Neither starter was involved in the decision despite strong outings. Detroit's Jack Flaherty allowed one run and two hits in six innings with seven strikeouts and three walks. Kansas City's Seth Lugo gave up one run and five hits with seven strikeouts and no walks in 6 2/3 innings.

Each team had a baserunner thrown out at the plate in the third inning.

Caglianone tripled to lead off the top of the inning, but Gleyber Torres threw him out when he tried to score on a one-out groundball.

In the bottom half, McKinstry attempted to score on Javier Báez's double, but Michael Massey's relay throw got him at the plate. Báez, though, took third on the play and came home on Jake Rogers' sacrifice fly. He was originally called out by plate umpire Jansen Visconti, but a replay review showed he reached over Salvador Perez's glove to touch the plate.

Kansas City tied it in the fourth on Kyle Isbel's RBI single.

Vinnie Pasquantino tripled with two outs in the eighth, but Finnegan got Salvador Perez to fly out. Kansas City also got a runner to third in the ninth, but Lane Thomas flew out to end the game.

The teams finish the three-game series Thursday with Tigers RHP Keider Montero (1-1, 1.74) facing LHP Kris Bubic (2-1, 2.50).

AP MLB: https://apnews.com/hub/mlb

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });