2016-09-17 36 views
0

好时机。使用onBeforeRequest和chrome.tabs.query(Chrome扩展)重定向到新的URL

我有一些有趣的想法,其中必须改变URL后输入推动“输入”由用户。

我的清单文件:

{ 
    "name": "The Pirate Bay_2", 
    "description": "Redirect The Pirate Bay to a different host", 
    "version": "1.0", 
    "manifest_version": 2, 

    "browser_action": { 
     "default_title": "Saving Studio generator", 
     "default_popup": "popup.html" 

    }, 
    "background": {"scripts":["redirect.js"]}, 
    "content_scripts": [ 
    { 
    "matches": ["http://*/*", "https://*/*"], 
    "js": ["background.js"] 
    } 
    ], 
    "permissions": 
    [ 
    "webRequest", 
    "https://www.amazon.com/", 
    "webRequestBlocking", 
    "tabs", 
    "activeTab" 
    ] 

} 

我redirect.js文件:

var host = "https://2ch.hk/b/"; 

chrome.tabs.query({ 
    'active': true, 'currentWindow': true 
    }, function (tabs) { 
    var url = tabs[0].url; 
    host = host+url; 
    console.log(url); 
    }); 

chrome.webRequest.onBeforeRequest.addListener( 
    function(details) { 

     if (localStorage.check_box == "true"){ 
      console.log("start_1"); 

     return {redirectUrl: host}; 
     } 
    }, 
    { 
     urls: ["https://www.amazon.com/" ], 
     types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"] 
    }, 

    ["blocking"] 
); 

主要是如何需要输入的URL,一些正则表达式模式改变,返回结果网址重定向到它。怎么可能做到?如何插入chrome.tabs.query里面onBeforeRequest或者这不需要,还有另外一种方法吗?

非常感谢

+1

请参阅[谷歌浏览器扩展中的同步呼叫](https://stackoverflow.com/a/22054013)和[如何等待异步方法的回调返回值?](https://stackoverflow.com/a/ 15130214) – wOxxOm

回答

0

我不得不做类似的事情,使用也是异步的铬存储API。我所做的就是将Web请求侦听器放在异步函数的回调中。所以在你的情况下:

var host = "https://2ch.hk/b/"; 
chrome.tabs.query(
    { 
     'active': true, 'currentWindow': true 
    }, 
    function (tabs) { 
     var url = tabs[0].url; 
     host = host+url; 
     console.log(url); 
    } 
    chrome.webRequest.onBeforeRequest.addListener( 
     function(details) { 
      if (localStorage.check_box == "true"){ 
       console.log("start_1"); 
       return {redirectUrl: host}; 
      } 
     }, 
     { 
      urls: ["https://www.amazon.com/" ], 
      types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"] 
     }, 
     ["blocking"] 
    ); 
); 

我还没有测试过,但这是我做什么时,我需要使用存储API,所以试试看。

相关问题