Firefox XUL扩展调用注入脚本中的函数?

时间:2014-03-07 07:07:06

标签: firefox firefox-addon xul

两部分问题:

1)在进行XUL扩展时,如何将脚本(例如'library.js')注入HTML DOM?

2)我目前有一个工具栏按钮,我想在点击按钮时调用'library.js'中的函数。

这是我当前工具栏按钮的XUL

<toolbarpalette id="BrowserToolbarPalette">
  <toolbarbutton id="myextension-button" 
    class="toolbarbutton-1"
    image="chrome://xulschoolhello/skin/favicon.png"
      oncommand="doStuff();"
    label="label" tooltiptext="tooltip" />
</toolbarpalette>

这是library.js(将被注入DOM)。 Library.js将有一堆修改DOM的函数。这是一个例子:

function changeTheDOM(){
     document.body.innerHTML = 'I changed it';
}

我希望doStuff()以某种方式调用HTML DOM中的函数changeTheDOM()。如果这是有道理的,请告诉我。

对于所有这些不同的命名空间/上下文,作为初学者,我很难掌握如何在我的应用程序代码和DOM之间进行交互。

2 个答案:

答案 0 :(得分:1)

用户联系我。他们创建了一个叠加扩展。所以这个解决方案不同于我在其他解决方案中提供的bootstrap演示,因为bootstrap插件不支持chrome.manifest中的资源。 (“资源”是必需的,因为它可以通过内容访问,在引导程序中你必须将“contentaccessible = true”设置为chrome包)

blee908创建的测试插件的存储库是HERE@GitHub

我分叉了这个插件并进行了更新HERE@GitHub。因此,当单击此窗口小部件时,它现在会在选项卡中注入一个警告“嘿”的脚本。 (如果在安装插件时没有看到它,则必须自定义工具栏并从那里拖动到插件栏或工具栏)

执行此操作有三个步骤,如更新后的插件

的提交历史记录中所示
  1. 创建test.js
      

    创建了一个文件夹,稍后我将向资源公开并创建该文件夹   包含我要注入的代码的脚本文件

  2.   
  3. 更新chrome.manifest

      

    从content / injectable /文件夹中创建资源,这样就可以将该文件夹中的任何内容注入到没有“Permission Security”例外的站点中。

  4. 更新browserOverlay.js

      

    我们在chrome.manifest文件中定义了使用我们的脚本到文件夹的位置是“resource:// xulschoolhello-injections /”所以让我们告诉它从中注入脚本文件。我还编辑了设置为“rawr”的innerHTML。

答案 1 :(得分:0)

此模板HERE - _ff-addon-template-BootstrapWatchHostEventListenerInjectFiles显示了如何通过在chrome.manifest文件中设置contentaccessible=true来注入文件。

安装它,然后导航到bing.com并滚动到底部,您将看到带有蓝色背景和注入图像的注入iframe。您还将看到注入脚本在加载bing时运行,它将是一个警告框。

但是上面的模板存在问题,我无法将iframe的src设置为它抛出此安全错误的chrome路径:

  

安全错误:http://www.bing.com/?FORM=Z9FD1的内容可能不会   加载或链接到   铬://bootstrap-watch-host-event-listener-inject-files/content/_inject-website.htm

这很奇怪,我不明白。 chrome.manifest中contentaccessible = true的重点是不会发生此安全错误。阅读此内容的其他开发者请帮助。