1

我试图在浏览其他网站时使用Chrome扩展程序获取网站的内容。 我在发生chrome.webRequest.onCompleted时调用了“XMLHttpRequest” 但是每当我调用方法XHR.Open时,都会在XHR对象的Status和StatusText字段中得到以下错误:[Exception:DOMException]。Chrome扩展程序:webRequest.onCompleted.addListener + XHR

有什么想法?

谢谢。

我使用下面的代码:

chrome.webRequest.onCompleted.addListener(
function(details) { 
    if (details.url.substring(0, 23) == "https://www.google.com/") // I know I do not need this 
    { 
     console.info("URL :" + details.url); 
     FindData("www.altavista.com"); 
    } 
}, 
// filters 
{ 
    urls: [ 
     "http://*.google.com/*", 
     "https://*.google.com/*", 
    ], 
    types: ["image"] 
}, 
["responseHeaders"]); 

function FindData(strURL) { 
    var req = new XMLHttpRequest(); 
    req.open("GET", strURL, true); 
    req.onreadystatechange=function() { 
     if (req.readyState==4) { 
      if (req.status==200) 
      { 
       console.info("Sucess!"); 
       console.info("Data: " + req.responseText); 
      } 
     else if (req.status==404) console.info("URL doesn't exist!") 
     else console.info("Error: Status is " + req.status) 
     } 
    } 
    req.send(); 
} 

我的manifest.json

{ 
    "name": "Test", 
    "version": "1.0", 
    "manifest_version": 2, 
    "description": "The first extension that I made.", 
    "browser_action": { 
    "default_popup": "popup.html" 
    }, 
    "permissions": ["webRequest", "webRequestBlocking", 
        "http://www.altavista.com/*", 
        "http://*.google.com/*", 
        "https://*.google.com/*"] 
} 

回答

1

你要添加的协议。 www.altavista.com解析为chrome-extension://..../www.altavista.com。使用http://www.altavista.com应该可以解决您的问题。

+0

Rob W, 您的意思是使用 'FindData(“http://www.altavista.com”);' 这也行不通。 – brunossilva

+0

@brunossilva我已经创建了基于您的代码的演示扩展,并且按预期工作。我假设你想在扩展的生命周期中永久地捕获所有的谷歌访问。调整:1.我已将代码复制粘贴到名为'background.js'的文件中。在清单中,我使用'“background”引用该文件:{“scripts”:[“background.js”]}'。 2.我删除了“我知道我不需要这个” - 如果是块。它的作品:[background.js](http://pastebin.com/ut5z00d1),[manifest.json](http://pastebin.com/v0NKSMJK)。 –

+0

当http:// www.google.com /'重定向到例如'http:// www.google.nl /',因为你没有声明访问清单文件中其他域的权限。确保你检查了这一点。 –