Chrome扩展程序:在特定时间重定向

时间:2015-09-29 13:19:51

标签: javascript google-chrome-extension

嘿试图在特定时间从page1重定向到第2页(在标签内,而不是打开新标签)。

的manifest.json:

{
    "name": "Google",
    "description": "Test",
    "version": "1.0",
    "manifest_version": 2,
    "background": {"scripts":["script.js"]},
    "permissions": [
        "alarms",
        "webRequest",
        "*://www.google.com/*",
        "webRequestBlocking"
    ]
}

script.js:

var host = "https://www.facebook.com/"
chrome.alarms.onAlarm.addListener(function(alarm){
    return {redirectUrl: host}
})

chrome.webRequest.onBeforeRequest.addListener(
    function(details) {
        return chrome.alarms.create("redirect", {when: Date.now() + 5000})
    },{
        urls: [
            "*://www.google.com/*"
        ],
        types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]
    ["blocking"]
)

重定向代码来自This Question, 使用计时器的代码取自This Question

编辑:谢谢Xan的答案

的manifest.json

{
    "name": "Google",
    "description": "Test",
    "version": "1.0",
    "manifest_version": 2,
    "content_scripts": [{
        "matches": ["*://www.google.com/*"],
        "js": ["script.js"]
    }]
}

script.js(使用Date.now()修改setTimeout以获得正确的等待)

setTimeout(function() {
  window.location = "https://www.facebook.com/"
}, 5000)

1 个答案:

答案 0 :(得分:2)

那不行,但不管你想要的是什么。

chrome.webRequest.onBeforeRequest指的是在网络请求被发送之前决定什么。

首先,它会停止等待决策的网络请求。因此,它不允许重定向以异步方式发生 - 您必须立即决定,而不是在5秒内。

其次,看起来您希望加载页面,但在5秒内重定向到其他地方 - 不要保持“加载”5秒钟。然后webRequest是错误的地方。

你想要的是一个content script,一段JS代码,它将在加载后在选项卡的上下文中执行。

我会将清单字段留给读者练习,这段代码将起作用:

// Content script
setTimeout(function() {
  window.location = "https://example.com/";
}, 5000);