2016-07-26 78 views
0

我想更改当前选项卡的网址,并重新加载页面。 我试过这段代码,但没有工作,这里的任何帮助将不胜感激。铬扩展:页面加载的事件和更新网址

background.js:

function updateUrl(){ 

    chrome.tabs.getCurrent(function (tab) { 

     var tabUrl = encodeURIComponent(tab.url); 

     var myNewUrl = tabUrl + "some text"; 

     chrome.tabs.update(tab.id, {url: myNewUrl}); 
    }) 
} 

chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
    if (changeInfo.status == 'complete') { 

     updateUrl(); 

    } 
}) 

manifest.json的:

{ 
    "name": "test", 
    "version": "0.1", 
    "manifest_version": 2, 

    "permissions": [ 
    "tabs", 
    "webNavigation", 
    "http://www.example.com/*" 
    ], 

    "background": { "scripts": ["background.js"] }, 

    "content_scripts": 
    [ 
    { 
     "matches": ["http://www.example.com/*"], 
     "js": ["background.js", "jquery.js"] 
    } 
    ] 
} 

回答

1

从你的清单,它看起来像你想包括background.js为内容脚本和后台脚本。内容脚本中不提供chrome.tabs,所以这不起作用。

根据您的具体使用情况,如果您想添加特定的URL,则可以使用chrome.webRequest API来实现此目的。

background.js:

chrome.webRequest.onBeforeRequest.addListener(function (details) { 
    return { 
     redirectUrl: details.url + "some text" 
    } 
}, { 
    urls: ["http://www.example.com/*"] 
}, ["blocking"]); 

manifest.js:

{ 
    "name": "test", 
    "version": "0.1", 
    "manifest_version": 2, 
    "permissions": [ 
    "webRequest", 
    "webRequestBlocking", 
    "http://www.example.com/*" 
    ], 
    "background": { 
    "scripts": [ 
     "background.js" 
    ] 
    } 
} 

这会 “一些文本” 添加到每月底要求浏览器向 “http://www.example.com/ *”

如果你确实想使用内容脚本来做到这一点,那么你需要看看message passing。这将允许您调用内容脚本中的后台脚本(可以使用chrome.tabs)。消息发送后,后台页面可以更新该选项卡。

0
  1. chrome.tabs.getCurrent用于获取制作该脚本的选项卡。如果从非选项卡上下文中调用(例如:背景页或弹出视图),它将返回undefined

    由于您拥有chrome.tabs.onUpdated处理程序中的选项卡,因此您可以直接使用它,而无需再次检索它。

    function updateUrl(tabId, tabUrl){ 
        var myNewUrl = encodeURIComponent(tabUrl) + "some text"; 
        chrome.tabs.update(tabId, {url: myNewUrl}); 
    } 
    
    chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) { 
        if (changeInfo.status == 'complete') { 
         updateUrl(tab.id, tab.url); 
        } 
    }); 
    
  2. 从你manifest.jsonbackground.js同时用于背景页面和内容脚本,这是一个糟糕的设计虽然不是根本原因这个问题。

    如果您可以将逻辑分为两部分,用于操作当前网页DOM的内容脚本和用于扩展相关事项的背景页面,那将会更好。