diff --git a/ext/src/main.ts b/ext/src/main.ts index b3cdcc8..cf87224 100755 --- a/ext/src/main.ts +++ b/ext/src/main.ts @@ -125,18 +125,23 @@ const SENDER_SCRIPT_FRAMEWORK_URL = browser.webRequest.onBeforeRequest.addListener( async details => { + const isFramework = details.url === SENDER_SCRIPT_FRAMEWORK_URL; + + await browser.tabs.executeScript(details.tabId, { + code: `window._isFramework = ${isFramework}` + , frameId: details.frameId + , runAt: "document_start" + }); + await browser.tabs.executeScript(details.tabId, { file: "shim/content.js" , frameId: details.frameId , runAt: "document_start" }); - const redirectUrl = details.url === SENDER_SCRIPT_URL - ? browser.runtime.getURL("shim/bundle.js") - : browser.runtime.getURL("shim/bundle.js?loadCastFramework=1"); return { - redirectUrl + redirectUrl: browser.runtime.getURL("shim/bundle.js") }; } , { urls: [ diff --git a/ext/src/shim/content.ts b/ext/src/shim/content.ts index 4fb2b0c..c2b203c 100644 --- a/ext/src/shim/content.ts +++ b/ext/src/shim/content.ts @@ -3,6 +3,15 @@ import { Message } from "../types"; import { onMessageResponse, sendMessage } from "./messageBridge"; + +if ((window as any)._isFramework) { + const polyfillScriptElement = document.createElement("script"); + polyfillScriptElement.src = browser.runtime.getURL( + "vendor/webcomponents-lite.js") + document.head.append(polyfillScriptElement); +} + + // Message ports const backgroundPort = browser.runtime.connect({ name: "shim" }); let popupPort: browser.runtime.Port; diff --git a/ext/src/shim/index.ts b/ext/src/shim/index.ts index 7fc74ef..8bfc158 100755 --- a/ext/src/shim/index.ts +++ b/ext/src/shim/index.ts @@ -13,6 +13,22 @@ if (!_window.chrome) { _window.chrome.cast = cast; + +const CAST_FRAMEWORK_SCRIPT_URL = + "https://www.gstatic.com/cast/sdk/libs/sender/1.0/cast_framework.js"; + +let bridgeInfo: any; +let scriptLoaded = false; + +// Call page's API loaded function if defined +function callPageReadyFunction () { + const readyFunction = _window.__onGCastApiAvailable; + if (readyFunction && typeof readyFunction === "function") { + readyFunction(bridgeInfo && bridgeInfo.isVersionCompatible); + } +} + + /** * If loaded within a page via a