Javascript 从Chrome扩展访问iframe URL

Javascript 从Chrome扩展访问iframe URL,javascript,google-chrome-extension,cross-domain,Javascript,Google Chrome Extension,Cross Domain,我有一个扩展,需要加载一个背景页面中有很多重定向的页面。一旦该页面到达一个已知的URL(),iframe应该将其src设置为about:blank 最后一个页面非常大,有大图像和所有不需要加载的内容,因此我没有附加到iframe的onload事件,而是将以下函数设置为100ms间隔: function update(){ if(document.getElementsByTagName('iframe')[0].contentDocument.location.href == "http

我有一个扩展,需要加载一个背景页面中有很多重定向的页面。一旦该页面到达一个已知的URL(),iframe应该将其
src
设置为
about:blank

最后一个页面非常大,有大图像和所有不需要加载的内容,因此我没有附加到iframe的
onload
事件,而是将以下函数设置为100ms间隔:

function update(){
    if(document.getElementsByTagName('iframe')[0].contentDocument.location.href == "https://website.com/index.php"){
        console.log("Done!");
        clearInterval(updateInterval);
        document.getElementsByTagName('iframe')[0].src = "about:blank";
    }
}
但是,iframe一开始加载,update()就会抛出以下错误:

不安全的JavaScript试图使用URL访问帧 从带有URL的框架 铬-extension://hdmnoclbamhajcoblymcnloeoedkhfon/background.html. 请求访问的帧具有“chrome扩展”协议 正在访问的帧具有“https”协议。协议必须匹配

我尝试捕获()以消除该错误,但毫不奇怪,传递回Javascript的消息没有包含URL。页面会多次重定向,因此了解确切的URL很重要。iframe的
src
属性也不会更新以反映重定向。

在大量的谷歌搜索和几乎放弃之后,我想出了以下解决方案。加载正确的页面后,它使用注入的内容脚本将消息发送回扩展

manifest.json:

{
    ...
    "background": {
        "page": "background.html"
    }, "content_scripts": [
        {
            "matches": ["http://website.com/index.php"],
            "js": ["content.js"],
            "all_frames": true,
            "run_at": "document_start"
        }
    ],
    "permissions": [
        "*://*.website.com/*"
    ]
}
background.html:

<html>
    <head>
        <script type="text/javascript" src="background.js"></script>
    </head>
    <body>
        <iframe src="about:blank"></iframe>
    </body>
</html>
content.js:

chrome.extension.sendMessage({loaded: window.location.href});
chrome.extension.sendMessage({loaded: window.location.href});