两部分问题:
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之间进行交互。
答案 0 :(得分:1)
用户联系我。他们创建了一个叠加扩展。所以这个解决方案不同于我在其他解决方案中提供的bootstrap演示,因为bootstrap插件不支持chrome.manifest中的资源。 (“资源”是必需的,因为它可以通过内容访问,在引导程序中你必须将“contentaccessible = true”设置为chrome包)
blee908创建的测试插件的存储库是HERE@GitHub
我分叉了这个插件并进行了更新HERE@GitHub。因此,当单击此窗口小部件时,它现在会在选项卡中注入一个警告“嘿”的脚本。 (如果在安装插件时没有看到它,则必须自定义工具栏并从那里拖动到插件栏或工具栏)
创建了一个文件夹,稍后我将向资源公开并创建该文件夹 包含我要注入的代码的脚本文件
更新chrome.manifest
从content / injectable /文件夹中创建资源,这样就可以将该文件夹中的任何内容注入到没有“Permission Security”例外的站点中。
更新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的重点是不会发生此安全错误。阅读此内容的其他开发者请帮助。