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

Firefox XUL扩展在注入脚本中调用函数?,firefox,firefox-addon,xul,Firefox,Firefox Addon,Xul,问题分两部分: 1) 在进行XUL扩展时,如何将脚本(例如“library.js”)注入HTMLDOM 2) 我现在有一个工具栏按钮,我想在点击按钮时调用“library.js”中的函数 这是我当前用于工具栏按钮的XUL <toolbarpalette id="BrowserToolbarPalette"> <toolbarbutton id="myextension-button" class="toolbarbutton-1" image="chrom

问题分两部分:

1) 在进行XUL扩展时,如何将脚本(例如“library.js”)注入HTMLDOM

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>
我希望doStuff()以某种方式调用函数changeTheDOM(),它位于HTML DOM中。让我知道这是否有意义

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

此模板显示了如何通过在chrome.manifest文件中设置
contentaccessible=true
来插入文件

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

但是上面的模板有一个问题,我无法将iframe的src设置为chrome路径,因为它会引发此安全错误:

安全错误:上的内容可能不存在 加载或链接到 chrome://bootstrap-watch-host-event-listener-inject-files/content/_inject-website.htm.


这很奇怪,我不明白。chrome.manifest中contentaccessible=true的全部要点是避免发生此安全错误。其他正在阅读本文的开发人员请帮助。

用户向我求助。他们创建了一个覆盖扩展。所以这个解决方案不同于我在提交的另一个解决方案中展示的引导演示,因为引导插件不支持chrome.manifest中的资源。(“资源”是必需的,因为它可以被内容访问,在引导程序中,您必须为chrome软件包设置“contentaccessible=true”)

blee908创建的测试加载项的存储库是

我分叉了这个插件并进行了更新。因此,它现在注入了一个脚本,当点击这个小部件时,该脚本会在当前网站的选项卡中显示“嘿”。(如果在安装插件时看不到它,则必须自定义工具栏并从那里拖动到插件栏或工具栏)

在更新的插件的提交历史记录中,有三个步骤可以完成此操作
  • 创建test.js 创建了一个文件夹,稍后我将向资源公开并创建 包含我要注入的代码的脚本文件
  • 更新chrome.manifest

    从content/injectable/文件夹中创建一个资源,通过这种方式,该文件夹中的任何内容都可以注入到站点中,而不会出现“权限安全”异常

  • 更新browserverlay.js

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


  • 也可以在此处查看此加载项:。它确实注入了脚本,卸载时它运行一个unject函数(它是注入脚本文件的一部分),该函数撤消了初始注入函数所做的事情。简直太神奇了!在加载HTML文档时,而不是单击按钮时,是否可以调用函数XULSchoolChrome.browserverlay.sayHello()?当然可以,我不会提交给该代表,但我会发布方法。使用与下面引导加载项解决方案相同的技术。我会试着在某个时候写一个演示,现在是凌晨1点,我要睡觉了:)代码链接断了。有人能提供一个新的链接吗?@TheBigOnion我不久前刚刚删除了那些回购协议。这就是传统技术,你确定你需要它吗?如果你这样做,我可以把它挖出来。是的,我必须修改Firefox45.5的XUL扩展。我一直无法弄清楚如何让我的扩展写入页面隐藏文本字段,并在同一页面上调用javascript函数。
    function changeTheDOM(){
         document.body.innerHTML = 'I changed it';
    }