Chrome扩展程序:点击后打开网址?

时间:2015-04-30 21:56:51

标签: google-chrome google-chrome-extension

我目前正在尝试理解谷歌Chrome扩展程序开发,但我遇到了正确理解它的问题。

我正在开发一个托管URL列表的扩展程序,并在点击时打开它们。这听起来像一个微不足道的任务,但它不起作用。可能我做了一些明显不对的事。

截图

它没有样式,但那是第2步。基本上,我想在点击时打开一个快捷方式:

Screenshot

的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 });
}

1 个答案:

答案 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