我有一个Chrome扩展程序,我正在努力将非HTTPS网站的用户自动重定向到HTTPS版本。
但是,目前的问题是用户必须手动激活此重定向。
使用manifest.json中的content_scripts完成这将是一件容易的事,但是,根据Chrome文档,内容脚本"不能......使用chrome。* API(chrome.extension的部分除外) "
所以,这是我的扩展程序的清单文件:
{
"name": "SSL Redirect",
"version": "1.0",
"manifest_version": 2,
"description": "Redirects plain HTTP domain.com to the encrypted, HTTPS secured version.",
"permissions": [ "tabs", "http://*/*", "https://*/*" ],
"background" : {
"page": "body.html"
},
"browser_action": {
"default_icon": "icon.png"
},
"content_scripts": [
{
"matches": ["http://www.domain.com/*"],
"js": ["redirect.js"]
}
]
}
这里是js:
var domain = /domain.com\//;
var ssldomain = "ssl.domain.com\/";
function updateUrl(tab){
if(tab.url.match(ssldomain)) {
alert("You're already using the SSL site. :)")
throw { name: 'Error', message: 'Stopped running, already in SSL mode.' };
}
if(tab.url.match(domain)) {
var newurl = tab.url.replace(domain, ssldomain);
newurl = newurl.replace(/^http:/, 'https:');
newurl = newurl.replace("www.", "");
chrome.tabs.update(tab.id, {url: newurl});
}
if(!(tab.url.match(domain))) {
alert("This extension only works on domain.com.")
throw { name: 'Error', message: 'Stopped running, not on domain.com.' };
}
}
chrome.browserAction.onClicked.addListener(function(tab) {updateUrl(tab);});
我的最终目标是让这个在任何匹配domain.com的网页上自动运行,无需用户互动。
我有点卡住了。有什么想法吗?
答案 0 :(得分:1)
1)在内容脚本中,您可以使用更改URL的标准方法,因为您在页面的上下文中运行。即:
var oldUrl = location.href;
/* construct newUrl */
if(newUrl != oldUrl) location.replace(newUrl);
2)废弃你已经写好的内容并阅读chrome.webRequest
API。
如果没有内容脚本或标签操作,这将实现您的需求。
示例:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
var url = details.url.replace(/^http/, "https");
return {redirectUrl: url};
},
{urls: ["http://domain.com/*"]},
["blocking"]
);
注意:您需要"*://domain.com/*"