2012-04-26 2 views
1

Я пытаюсь создать надстройку через Mozilla Add-On Builder. Мне нужно знать, как получить URL-адрес левой кнопкой мыши на активной вкладке через надстройку и открыть ее на новой вкладке.Как получить URL-адрес нажатой ссылки?

Я знаю, что этот процесс включал добавление eventlistener через mod-mod, а затем с помощью модуля tabs, однако я не могу заставить синтаксис правильно.

Edit: (Это то, что я до сих пор)

var Widget = require("widget").Widget; 
var tabs = require('tabs'); 
var pageMod = require("page-mod"); 

exports.main = function() { 


    pageMod.PageMod({ 
    include: '*', 
    contentScriptWhen: 'ready', 
    contentScript: "window.addEventListener('click', function(event) { self.port.emit('click',event.target.toString())},false)", 
    onAttach: function(worker) { 
     worker.port.on("click", function(urlClicked) { 
      tabs.open(urlClicked); 

     }); 
    } 

    }); 

}; 
+2

Не могли бы вы показать нам, что вы пробовали? Подход правильный, поэтому без вашего кода я не могу сказать вам, где вы допустили ошибку. Только подозрение, что вы пытались использовать модуль 'tabs' из скрипта контента вместо отправки сообщения обратно на расширение, чтобы оно это делало. –

+0

Владимир, я опубликовал свое первоначальное сообщение, чтобы включить код, который у меня есть до сих пор. То, что мне нужно, - это получить URL-адрес ссылки, а затем уметь манипулировать частями этого URL-адреса, чтобы сформировать другой, который затем будет открыт в новом теге. Теперь есть смысл? – Cuyware

ответ

0

код у вас есть есть в основном правильно и работает для меня. Однако есть две проблемы с кодом вашего кода контента:

  • Для этого необходимо позвонить event.preventDefault(), чтобы браузер не перешел по ссылке. В противном случае связанная страница будет загружена как на текущей вкладке, так и на новой вкладке, открытой вашим расширением.
  • Он не проверяет, действительно ли event.target является ссылкой. Это может быть дочерний узел ссылки или вообще не ссылка.

В целом, сценарий контент должен выглядеть следующим образом:

window.addEventListener("click", function(event) 
{ 
    var link = event.target; 
    while (link && link.localName != "a") 
    link = link.parentNode; 

    if (link) 
    { 
    self.port.emit("click", link.href); 
    event.preventDefault(); 
    } 
}, false); 

Для нетривиального контента сценария, как это, вы не должны использовать contentScript параметр, а поместить его в свой собственный файл в data/ каталог. Затем вы можете использовать параметр contentScriptFile при построении панели:

contentScriptFile: require("self").data.url("contentScript.js"), 
+0

Wladimir, похоже, работает. У меня есть еще один вопрос. Когда я нажимаю ссылку в Документах Google, в которой используется https, я получаю сообщение об ошибке безопасности: «Ошибка безопасности: содержимое https: *** может не загружать данные из https: *** со звездочками, представляющими URL-адрес. Знаете ли вы, что может вызывать это? Также есть способ определить, щелкнут ли файл, например, файл PDF? – Cuyware

+0

@Cuyware: Я уверен, что ошибка безопасности не связана с вашим расширением - это проблема с некоторыми внутренними компонентами Google. Что касается распознавания файлов PDF - это невозможно, по крайней мере, до тех пор, пока файл не начнет загружаться. –

+0

Я думал, что цель href будет иметь .pdf в названии, поэтому я думал, что есть способ проверить это. – Cuyware

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