Доверенный скрипт Firefox Addon для содержимого страницы

Итак, я пытаюсь использовать chrome:// URI в своем дополнении, и я хочу использовать на нем page-worker, используя метод доверенного содержимого сценариев, однако, похоже, это не работает, когда я жестко кодирую URI, chrome://<package name>/<part>/<file>; однако это работает, когда я использую self.data.url('filename'). Я хочу использовать chrome:// URI, потому что я использую GUID вместо стиля электронной почты в качестве идентификатора надстройки, а также я не хочу использовать ресурс: // URI.

Сценарий контента

addon.port.emit('hi');

HTML

<html>
   <head>
      <meta charset="UTF-8">
        <title>Gaia Utils Settings</title>
        <script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
        <script type="text/javascript" src="chrome://gaiascripts/content/dropdown.min.js"></script>
        <script type="text/javascript" src="chrome://gaiascripts/content/settings.dev.js"></script>
        <script type="text/javascript" src="chrome://gaiascripts/content/test.dev.js"></script>
        <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
      <link href="css/settings.css" rel="stylesheet" type="text/css">
      <link href="css/poststyle.css" rel="stylesheet" type="text/css">
   </head>
   <body>
      <nav id="navbar_header" class="navbar navbar-blue navbar-static-top"></nav>
      <div id="content_wrapper" class="container">
         <div id="content_padding" class="container"></div>
      </div>
      <footer class="footer"></footer>
   </body>
</html>

main.js

var PageWorker = require("sdk/page-worker");
PageWorker.Page({
   contentURL: "chrome://gaiautils/content/settings.dev.html",
   onMessage: function(message) {
      console.log(message);
   }
});

Я знаю, что могу использовать page-mod и прикреплять к нему скрипты, но я бы предпочел вызывать скрипты из файла и иметь возможность взаимодействовать с основным кодом дополнения. Итак, есть ли способ, чтобы я мог получить свой пирог и съесть его - используя жестко закодированный URI chrome:// в сочетании с вызовом сценариев из файла HTML, при этом имея возможность связывать эти сценарии с основным. js-файл?


person Knight Yoshi    schedule 21.07.2014    source источник
comment
Никогда не загружайте удаленные скрипты в код вашего дополнения!   -  person nmaier    schedule 21.07.2014
comment
Что касается остальной части вопроса: в чем именно заключается ваша проблема? Что не работает? Какая ошибка при попытке?   -  person nmaier    schedule 21.07.2014
comment
Вопрос в том, что, поскольку я использую URI chrome://, как я могу его использовать, чтобы я мог использовать addon.port.emit() в сценариях содержимого, которые вызываются непосредственно в файле HTML, чтобы я не мне не нужно использовать self.data.url('htmlFile'), потому что я не хочу использовать ресурс://pageckage-GUID-at-jetpack/path/to/file Как я уже сказал, я знаю, что могу используйте page-mods, но это означает, что я не вызываю файлы сценариев в файле HTML.   -  person Knight Yoshi    schedule 21.07.2014


Ответы (1)


Как мне это сделать, чтобы я мог использовать addon.port.emit() в сценариях содержимого, которые вызываются непосредственно в файле HTML, чтобы мне не приходилось использовать self.data.url('htmlFile') , потому что я не хочу использовать ресурс://pageckage-GUID-at-jetpack/path/to/file

SDK считает страницы "надежными" только в том случае, если загружаемый URL-адрес является частью дополнительных ресурсов (data/). chrome:// URI не являются. Следовательно, вам нужно будет использовать обычные скрипты контента с помощью опции contentScriptFile: [...] в вашем определении PageWorker.

<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.1.min.js"></script>

Никогда не загружайте удаленные скрипты из соображений безопасности (и в гораздо меньшей степени из соображений производительности)! Отправьте локальную копию jQuery, если хотите ее использовать.

person nmaier    schedule 21.07.2014
comment
Ну, это отстой, но в этом есть смысл. Спасибо! Итак, если я собираюсь использовать contentScriptFile, в чем разница между ним и модом страницы, когда дело доходит до внедрения скриптов контента на страницу, есть ли разница? Я знаю, что с page-mods вы также можете добавить таблицу стилей. Спасибо за местный совет по файлу jQ. - person Knight Yoshi; 21.07.2014