我正在尝试使用Chrome扩展程序,试图使扩展程序可以根据其标题阻止和重定向网站。在此示例中,当任何网页标题的值为“ Microsoft-Official Home Page”时,我希望它重定向到https://example.com/。我在下面放置的示例代码几乎可以正常工作,问题是我必须在第一次访问该页面时刷新页面,否则它不会将我重定向到example.com。为什么在我第一次看到具有指定标题的页面时却没有刷新,它为什么不重定向我?我应该怎么做?
background.js:
// Listens for a change to occur.
chrome.tabs.onUpdated.addListener(function() {
// Gets the URL and title of the webpage in the selected tab.
chrome.tabs.getSelected(function(tab) {
var currentUrl = tab.url;
var currentTitle = tab.title;
// Tests if the page title is equal to the given string.
if(currentTitle == "Microsoft - Official Home Page") {
chrome.webRequest.onBeforeRequest.addListener(
function() {
return {redirectUrl: "https://example.com/"};
},
{urls: [currentUrl]}, // Blocks the URL of the current tab.
["blocking"]
);
}
}
}
manifest.json:
{
"name": "Test Extension",
"version": "1.0",
"description": "An extension to block sites by title.",
"permissions": [
"tabs",
"tabCapture",
"webRequest",
"webRequestBlocking",
"<all_urls>"
],
"background": {
"scripts": ["background.js"],
"persistent": true
},
"manifest_version": 2
}
答案 0 :(得分:1)
问题:
解决方案:
当知道标签的标题时,将使用包含新标题的change
参数调用onUpdated侦听器。如果标题是已知的-例如重新加载标签页时-标题没有更改通知,而仅是状态(例如,加载/完成)的更改通知,因此我们改用tab.title
。
这是正确的background.js:
chrome.tabs.onUpdated.addListener((tabId, change, tab) => {
const title = 'title' in change ? change.title : tab.title;
if (title === 'Microsoft - Official Home Page') {
chrome.tabs.update(tabId, {url: 'https://example.com/'});
}
});
以上各项才能正常运行,唯一的manifest.json权限:
"permissions": [
"tabs"
],