我目前正在尝试理解谷歌Chrome扩展程序开发,但我遇到了正确理解它的问题。
我正在开发一个托管URL列表的扩展程序,并在点击时打开它们。这听起来像一个微不足道的任务,但它不起作用。可能我做了一些明显不对的事。
截图
它没有样式,但那是第2步。基本上,我想在点击时打开一个快捷方式:
的manifest.json
{
"manifest_version": 2,
"name": "Chrome Shortcuts",
"description": "This extension provides shortcuts to locations in Google Chrome",
"version": "1.0.0",
"browser_action":
{
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"content_scripts":
[
{
"js": [ "popup.js" ],
"matches": [ "http://*/*", "https://*/*" ]
}
],
"permissions":
[
"tabs",
"http://*/*"
]
}
popup.html
<!doctype html>
<html>
<head>
<title>Chrome Shortcuts</title>
<script src="popup.js"></script>
</head>
<body>
<ul>
<li><a href="javascript:OpenShortcut('chrome://settings/passwords')">Settings - Passwords</a></li>
</ul>
</body>
</html>
popup.js
function OpenShortcut(location)
{
chrome.tabs.create({ url: location });
}
答案 0 :(得分:3)
您无法使用标准方法打开chrome://
网址。这是一个特权页面,导航将失败。
相反,您需要使用tabs
API。具体地,
chrome.tabs.create({url: "chrome://settings/passwords"});
如果您需要在后台打开而不关闭弹出窗口,请添加active: false
。
我完全错过了你已经这样做的事实,对不起!问题在于尝试使用href="javascript:[some code]"
激活您的代码。
由于内容安全政策,此扩展程序以及onclick="[some code]"
将在Chrome扩展程序中失败。具体而言,inline code is not allowed(并且您无法以允许它的方式修改CSP。)
文档给出了解决方案 - 从代码中分配处理程序,即
document.addEventListener('DOMContentLoaded', function () {
document.getElementById('link1').addEventListener('click', function() {
OpenShortcut('chrome://settings/passwords');
});
});
要实现此目的,请在链接中添加id
属性。需要DOMContentLoaded
包装器,因为在您的节点存在于DOM之前执行popup.js
。