如何通过window.open()在跨域窗口弹出窗口中操作dom

时间:2012-03-02 06:50:33

标签: javascript google-chrome-extension cross-domain

我想让扩展程序帮我查看不同网站的状态。所以我需要扩展来打开不同的网站,并在网页上检查一些dom。该网站可能是一个动态网页,所以我必须在浏览器中加载页面,以便我可以获得真正的dom(不仅仅是源代码)。 通常,对于相同的域名范围。它可能是这样的:

var w = window.open('http://www.yahoo.com');
console.log(w);
$(w).bind('load', function() {
  //In chrome extension, i can not get "this.document"
  //And in iframe i can not get "document", either
  console.log(this.document);
});

我正在尝试使用chrome扩展程序允许域名交叉ajax。所以我可以操纵不同domians的窗口。 但它失败了。该代码段在Chrome扩展程序下无效。为什么?为什么chrome扩展程序有权执行跨域ajax但不能操作来自其他域的窗口? 我也试过了iframe。它也不起作用。

我想问一下,有没有办法通过chrome或chrome扩展来操纵跨域文档操作?

2 个答案:

答案 0 :(得分:1)

您可以使用--disable-web-security参数运行chrome以禁用跨域策略。如果这样做,您将不需要扩展来操纵另一个窗口。

答案 1 :(得分:1)

chrome扩展的一个优点是:它为webapp授予更多权利以绕过某些安全限制,包括XHR。

请在跨站点xhr检查文档:

http://code.google.com/chrome/extensions/xhr.html

一些预防措施:

  1. 您需要配置manifest.json文件,permissions属性以在更多网址上启用xhr: More possible permissions 如果您需要在iframe中运行扩展内容脚本,请注意content_scripts doc

    中设置的额外属性
    {
       "name": "My extension",
       ...
       "permissions": [   
               "tabs",
               "http://*/*",
               "https://*/*" ],
       "content_scripts": [{ //note: for iframe, array
           "matches":[
               "http://*/*",
               "https://*/*" //match all url
           ],
           "run_at": "document_idle",
           "js": ["jquery.min.js", "contentscript.js"] //script you need to run in iframe
        }]
    
         

    }

  2. 您需要在background.html中处理xhr,或者将网址传递到扩展程序将打开的新窗口(chrome.windows.create)。您可能对我正在处理的扩展(对于清单和窗口打开)有所了解:https://github.com/vincicat/ImageInfoPlus

  3. 希望它可以提供帮助。