我的当前脚本旨在重定向页面,如果它在数组中有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());
以下两种尝试都不起作用:
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"
运行:
"content_scripts": [
{
"matches": ["<all_urls>"],
"run_at": "document_start",
"js": ["redirect.js"]
}
]
答案 0 :(得分:3)
首先,由于内容脚本未注入chrome-extension:
页面,因此对于已阻止的网址,您将无法获得任何循环。
但是,对于未被阻止的网址存在循环风险,因为即使您为window.location
分配了相同的值,它也会重新加载页面。
此外,将真实的URL传递给chrome.runtime.getURL()
会破坏它 - 所以,幸运的是,你不会得到循环,但你也无法访问任何页面。
因此,您的代码应该只是不在“允许”情况下分配。
function check () {
if (blocked.includes(window.location.href)) {
window.location = chrome.runtime.getURL("interface/redirect.html");
}
}
check();
(使用的方法:Array.prototype.includes
)
那就是说,你正在使用错误的工具来完成工作。正确的方法是使用webRequest
API。它可以让你更有效地重定向,并且专门为工作而设计。请参阅Chrome文档中的examples。