Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox WebExtension,在页面加载时运行脚本一次_Javascript_Firefox Addon_Firefox Addon Webextensions - Fatal编程技术网

Javascript Firefox WebExtension,在页面加载时运行脚本一次

Javascript Firefox WebExtension,在页面加载时运行脚本一次,javascript,firefox-addon,firefox-addon-webextensions,Javascript,Firefox Addon,Firefox Addon Webextensions,如果页面在数组中有URL,我当前的脚本设计用于重定向页面。我的脚本将(我认为)重定向页面,但随后将继续重定向它(导致不断加载页面)。有没有办法只运行一次脚本或结束脚本 脚本: var blocked = ["http://example.org", "http://example.com"]; function check () { for (i = 0; i < blocked.length; i++ ) { var item = blocked[i];

如果页面在数组中有URL,我当前的脚本设计用于重定向页面。我的脚本将(我认为)重定向页面,但随后将继续重定向它(导致不断加载页面)。有没有办法只运行一次脚本或结束脚本

脚本:

var blocked = ["http://example.org", "http://example.com"];
function check () {
    for (i = 0; i < blocked.length; i++ ) {
        var item = blocked[i];
        var url = window.location.href;
        if (blocked[i] == url) {
            return "interface/redirect.html";
        }
    }
    return url;
}
window.location = chrome.runtime.getURL(check());

首先,由于内容脚本不会注入
chrome extension:
页面,因此对于被阻止的URL,您不会得到任何循环

但是,对于未被阻止的URL,确实存在循环的风险,因为即使将相同的值分配给
window.location
,它也会重新加载页面

此外,将真实的URL传递给chrome.runtime.getURL()会破坏它-因此,幸运的是,您不会得到循环,但也无法访问任何页面

因此,您的代码不应该在“允许”的情况下赋值

(使用的方法:)


也就是说,你在工作中使用了错误的工具。正确的方法是使用
webRequest
API。它将允许您更有效地重定向,并且是专门为该作业设计的。请参阅Chrome文档。

您不妨将此更改为使用普通数组方法,而不是使用循环自己迭代数组的额外代码。至少,将
url
分配移出循环。这不像
window.location.href
会改变。考虑到它是一个扩展,您可以只使用
if(blocked.includes(window.location.href)){window.location=chrome.runtime.getURL(“interface/redirect.html”);}
var blocked = ["http://example.org", "http://example.com"];
var ran = false;
function check () {
    for (i = 0; i < blocked.length; i++ ) {
        var item = blocked[i];
        var url = window.location.href;
        if (blocked[i] == url) {
            return "interface/redirect.html"
        }
    }
    return url;
}
if (ran == false) {
    window.location = chrome.runtime.getURL( check () );
    ran = true;
}
var blocked = ["http://example.org", "http://example.com"];
function check () {
    for (i = 0; i < blocked.length; i++ ) {
        var item = blocked[i];
        var url = window.location.href;
        if (blocked[i] == url) {
            return "interface/redirect.html";
        }
    }
    return url;
}
window.location = chrome.runtime.getURL(check());
var x = 0;
while (x == 0) {

};
"content_scripts": [
    {
        "matches": ["<all_urls>"],
        "run_at": "document_start",
        "js": ["redirect.js"]
    }
]
function check () {
    if (blocked.includes(window.location.href)) {
        window.location = chrome.runtime.getURL("interface/redirect.html");
    }
}
check();