2015-04-30 3 views
0

В настоящее время я пытаюсь разобраться в разработке Google Chrome Extension, но у меня возникли проблемы с его пониманием.Расширение Chrome: открыть URL-адрес по клику?

Я разрабатываю расширение, на котором размещается список 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.htm л

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

ответ

3

Вы не можете открыть chrome:// URL-адресов с использованием стандартных методов. Это привилегированная страница, и навигация не удастся.

Вместо этого вам необходимо использовать API tabs. В частности,

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 требуется, поскольку ваш popup.js выполняется до того, как ваш узел существует в DOM.

+0

Вы имеете в виду, например, 'Settings - Passwords'? Это также не дает мне ответа на клик. – bytecode77

+0

Во-первых, вам нужно научиться его отлаживать. Щелкните правой кнопкой мыши и выберите «Осмотреть всплывающее окно». Таким образом, вы получаете больше информации, чем «без ответа». Во-вторых, [прочитайте это] (https://developer.chrome.com/extensions/contentSecurityPolicy#JSExecution). – Xan

+0

Удивительный! Я, наконец, понял. Спасибо! – bytecode77

Смежные вопросы