我想更改chrome中当前标签的网址并重新加载页面。 我尝试了这段代码,但没有用,任何帮助都会非常感激。
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"]
}
]
}
答案 0 :(得分:1)
从您的清单中看起来您正在尝试将background.js包含为内容脚本和后台脚本。内容脚本中无法使用chrome.tabs
,因此无法使用。
根据您的具体使用情况,如果您要附加特定网址,则可以使用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
)。邮件发送后,后台页面可以更新选项卡。
答案 1 :(得分:0)
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);
}
});
从你manifest.json
开始,background.js
用于后台页面和内容脚本,这是一个糟糕的设计,虽然不是这个的根本原因题。
如果你可以把逻辑划分为两部分,最好是用来操纵当前网页DOM的内容脚本和用于扩展相关事物的背景页面,这样会更好。