所以我在这里找到了几个页面,以及各种博客文章似乎完全按照我想要做的去做,但它们都是几年之久,看起来很简单,但不是工作。
正如标题所说,在thisdodo.com上有一个来自thatdomain.com的iframe,我想在iframe中获取div中的值。
的manifest.json
{
"manifest_version": 1,
"name": "MyExtention",
"version": "1.0",
"description": "Nothing Yet",
"permissions": [
"storage",
"tabs",
"unlimitedStorage",
"webRequest",
"webNavigation",
"*://*.match-both-iframe-and-main-domain.com/*",
"*://*/*"
],
"background": {
"scripts": ["listener.js"],
"persistent": true
},
"content_scripts":
[
{
"matches": ["*://*.matchnothing.shshdjdjffkdj.com/*"],
"js": ["mainscript.js"],
"all_frames": true
}
]
}
内容脚本url不匹配任何内容,因为它是从侦听器触发的(有效)。基本上它在激活之前等待来自2个网址之一的请求。
listener.js
var chrome = chrome || {};
var callback = function(listenerRes) {
console.log(listenerRes.url);
if (listenerRes.url.indexOf("listenurl1") > -1 ||
listenerRes.url.indexOf("listenurl2") > -1) {
chrome.tabs.get(listenerRes.tabId, function(tab) {
chrome.tabs.executeScript(tab.id, {file: "mainscript.js"});
});
}
};
chrome.webRequest.onBeforeRequest.addListener( callback, {urls: ["*://*.google.com/*"]} );
mainscript.js
var chrome = chrome || {};
... // helper functions and such
var iframe = document.getElementsByid('myiframe');
// Get all data.
var datas = [];
try {
datas = iframe.contentWindow.document.getElementsByClassName('mydata'); // error is here
}catch(e){
console.log(e);
}
... // do stuff with the data
在注释行上,它会抛出一个"阻止带有原始URL的帧来访问跨源帧。"
因此,我认为all_frames = true,chrome.tabs.executeScript和权限中的域的某些组合应该允许此操作。但它没有。
可能需要注意的是,这个监听器的原因是因为iframe不在页面上启动。
请帮助,我是一位经验丰富的网络开发人员,但这是我第一次涉足Chrome Extentions。