Javascript 从Chrome扩展访问iframe URL
我有一个扩展,需要加载一个背景页面中有很多重定向的页面。一旦该页面到达一个已知的URL(),iframe应该将其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
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});