Google chrome 使用Chrome扩展将http重定向到https
我正在开发一些Node.js应用程序,它们使用Google chrome 使用Chrome扩展将http重定向到https,google-chrome,ssl,google-chrome-extension,https,localhost,Google Chrome,Ssl,Google Chrome Extension,Https,Localhost,我正在开发一些Node.js应用程序,它们使用https服务器。在开发它们时,我使用自签名证书在localhost上运行它们。基本上,一切正常,但我有两个问题: 当我将浏览器指向https://localhost:3000它第一次警告我有不可信的证书。当然,这是正确的(也是重要的),但它是在开发时注释的。当然,我可以将证书添加为受信任的证书,但它们会不时发生变化,我不想使证书存储混乱 有时我只是忘记在地址栏中输入https部分,所以Chrome尝试使用http加载网站。无论出于什么原因,Chro
https
服务器。在开发它们时,我使用自签名证书在localhost
上运行它们。基本上,一切正常,但我有两个问题:
https://localhost:3000
它第一次警告我有不可信的证书。当然,这是正确的(也是重要的),但它是在开发时注释的。当然,我可以将证书添加为受信任的证书,但它们会不时发生变化,我不想使证书存储混乱https
部分,所以Chrome尝试使用http
加载网站。无论出于什么原因,Chrome都没有意识到没有响应http
请求的Web服务器,而是加载、加载、加载- 如果该扩展被禁用,它将什么也不做
- 如果扩展已启用,并且您向
(并且只有在那时!)发送请求,则它将执行两项操作:localhost
- 如果请求使用
,但几秒钟后页面仍处于http
,则应尝试改用挂起状态
https
- 临时接受任何证书,无论其是否受浏览器信任
localhost
有效
所以,现在我的问题是:
- 使用Chrome扩展就可以做到这一点吗
- 由于我在编写Chrome扩展方面绝对没有经验,那么什么是一个好的起点呢?我应该在Google上寻找什么术语呢
- 这是一个很好的起点。您描述的所有内容都可以使用Chrome扩展名,但“证书接受”部分除外。(我不是说这是不可能的,我只是不知道是否可能——但如果可能的话,我会感到非常惊讶(和担心)
当然,始终存在
--ignore certificate errors
命令行开关,但它不会区分localhost
和其他域
如果您决定实现其余的功能,我建议您首先查看和/或。(我还要提到,“内容脚本”不太可能有任何用处。)
也就是说,下面是一些演示扩展的代码(只是为了让您开始) 什么是你做的:
停用时->无任何内容
激活时->侦听指向URL的选项卡,如
http://localhost[:PORT][/…]
并将它们重定向到https
(它不等待响应或任何东西,它只是立即重定向它们)
如何使用:单击浏览器操作图标以激活/停用 当然,这并不完美/完整,但这是一个起点:)
扩展目录结构:
extention-root-directory/
|_____ manifest.json
|_____ background.js
|_____ img/
|_____ icon19.png
|_____ icon38.png
manifest.json:(有关可能字段的更多信息,请参见。) 是一个很好的起点。您描述的所有内容都可以使用Chrome扩展名,但“证书接受”部分除外。(我不是说这是不可能的,我只是不知道是否可能——但如果可能的话,我会感到非常惊讶(和担心) 当然,始终存在
--ignore certificate errors
命令行开关,但它不会区分localhost
和其他域
如果您决定实现其余的功能,我建议您首先查看和/或。(我还要提到,“内容脚本”不太可能有任何用处。)
也就是说,下面是一些演示扩展的代码(只是为了让您开始) 什么是你做的:
停用时->无任何内容
激活时->侦听指向URL的选项卡,如
http://localhost[:PORT][/…]
并将它们重定向到https
(它不等待响应或任何东西,它只是立即重定向它们)
如何使用:单击浏览器操作图标以激活/停用 当然,这并不完美/完整,但这是一个起点:)
扩展目录结构:
extention-root-directory/
|_____ manifest.json
|_____ background.js
|_____ img/
|_____ icon19.png
|_____ icon38.png
manifest.json:(有关可能字段的更多信息,请参见。)
这是一个很好的起点。除证书接受部分外,您描述的所有内容都可以使用Chrome扩展。(我不是说这是不可能的,我只是不知道它是否是-但如果是的话,我会非常惊讶(并担心)的。)当然,总是有
--忽略证书错误
命令行开关,但它不会区分localhost和其他。感谢您指出这一切,它非常有用:-)。还有一个问题:您建议使用WebRequestAPI还是简单的内容脚本?我认为内容脚本对您没有多大用处。我会去的,好的,非常感谢:-)。如果你愿意,你能把你的评论转换成答案吗?现在有一个答案我想让你们接受:这是一个很好的起点。除证书接受部分外,您描述的所有内容都可以使用Chrome扩展。(我并不是说这是不可能的,我只是不知道它是否是——但如果是的话,我会非常惊讶(并担心)的。)当然,总是有--ignore certificate errors
命令行开关,但它不会区分本地主机和
/* Configuration for the Badge to indicate "ENABLED" state */
var enabledBadgeSpec = {
text: " ON ",
color: [0, 255, 0, 255]
};
/* Configuration for the Badge to indicate "DISABLED" state */
var disabledBadgeSpec = {
text: "OFF",
color: [255, 0, 0, 100]
};
/* Return whether the extension is currently enabled or not */
function isEnabled() {
var active = localStorage.getItem("active");
return (active && (active == "true")) ? true : false;
}
/* Store the current state (enabled/disabled) of the extension
* (This is necessary because non-persistent background pages (event-pages)
* do not persist variable values in 'window') */
function storeEnabled(enabled) {
localStorage.setItem("active", (enabled) ? "true" : "false");
}
/* Set the state (enabled/disabled) of the extension */
function setState(enabled) {
var badgeSpec = (enabled) ? enabledBadgeSpec : disabledBadgeSpec;
var ba = chrome.browserAction;
ba.setBadgeText({ text: badgeSpec.text });
ba.setBadgeBackgroundColor({ color: badgeSpec.color });
storeEnabled(enabled);
if (enabled) {
chrome.tabs.onUpdated.addListener(localhostListener);
console.log("Activated... :)");
} else {
chrome.tabs.onUpdated.removeListener(localhostListener);
console.log("Deactivated... :(");
}
}
/* When the URL of a tab is updated, check if the domain is 'localhost'
* and redirect 'http' to 'https' */
var regex = /^http(:\/\/localhost(?::[0-9]+)?(?:\/.*)?)$/i;
function localhostListener(tabId, info, tab) {
if (info.url && regex.test(info.url)) {
var newURL = info.url.replace(regex, "https$1");
chrome.tabs.update(tabId, { url: newURL });
console.log("Tab " + tabId + " is being redirected to: " + newURL);
}
}
/* Listen for 'browserAction.onClicked' events and toggle the state */
chrome.browserAction.onClicked.addListener(function() {
setState(!isEnabled());
});
/* Initially setting the extension's state (upon load) */
setState(isEnabled());