Google Extension:访问不同域的iframe中的DOM

时间:2015-10-19 01:16:10

标签: javascript google-chrome iframe google-chrome-extension

所以我在这里找到了几个页面,以及各种博客文章似乎完全按照我想要做的去做,但它们都是几年之久,看起来很简单,但不是工作。

正如标题所说,在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。

0 个答案:

没有答案