【问题标题】:Chrome Extensions: webRequest.onCompleted.addListener + XHRChrome 扩展:webRequest.onCompleted.addListener + XHR
【发布时间】:2012-07-02 20:59:43
【问题描述】:

我正在尝试使用 Chrome 扩展程序在浏览其他网站时获取网站内容。 我在 chrome.webRequest.onCompleted 发生时调用“XMLHttpRequest” 但是每当我调用 XHR.Open 方法时,都会收到以下错误:[Exception: DOMException] in fields Status and StatusText from XHR object.

有什么想法吗?

谢谢。

我正在使用下面的代码:

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/*"]
}

【问题讨论】:

    标签: google-chrome google-chrome-extension xmlhttprequest webrequest


    【解决方案1】:

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

    【讨论】:

    • Rob W,你的意思是使用FindData("http://www.altavista.com"); 这也没用。
    • @brunossilva 我已经根据您的代码创建了一个演示扩展,它按预期工作。我假设您希望在扩展程序的生命周期内永久捕获所有 google 访问。调整: 1. 我已将您的代码复制粘贴到一个名为background.js 的文件中。在清单中,我使用"background":{"scripts":["background.js"]} 引用了这个文件。 2. 我删除了“我知道我不需要这个”-if-block。它有效:background.jsmanifest.json
    • http://www.google.com/ 重定向到例如http://www.google.nl/,因为您没有在清单文件中声明访问其他域的权限。请务必检查这一点。
    • 1) 如何在后台使用脚本进行调试? 2)听者捕捉一切正常。当我调用 XHR 的 Open 方法时,就会出现问题。在调试模式下,我看到状态字段的内容出现错误:[异常:DOMException]。在您的示例中,下面的行是否有效? console.info("Data: " + req.responseText);
    • 我在链接后放了一个“/”,在 XHR.Open 上为 false 并且......成功! '查找数据("altavista.com/");'谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 2015-06-09
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2012-06-20
    相关资源
    最近更新 更多