- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在开发扩展时遇到了这个问题。我根据选项卡就绪事件将 pageMod 附加到页面以修改页面的内容,但是当我重新加载页面时,工作人员似乎又附加了一次,因此在 1 次重新加载后,它会为同一网址加载 2 个工作人员(没有 iframe),在 2 次重新加载后,它会加载 3 个工作线程,等等。这是我开始使用的初始代码(我将其从较大的 block 中剥离出来):
mod = null;
tabs.on('ready', function(tab) {
mod = this.pageMod.PageMod({
include: ["*"],
contentScriptFile: ["resource://data/full_page.js"],
attachTo: ["top", "frame", "existing"],
onAttach: function(worker) {
Logger.log('---------> worker.url is ' + worker.url);
}
});
}
我能够通过在就绪事件处理程序的最开始附加此代码来销毁每个就绪事件上的 mod,从而在某种程度上解决此问题。
mod = null;
tabs.on('ready', function(tab) {
if (mod) {
mod.destroy();
}
mod = this.pageMod.PageMod({
include: ["*"],
contentScriptFile: ["resource://data/full_page.js"],
attachTo: ["top", "frame", "existing"],
onAttach: function(worker) {
Logger.log('---------> worker.url is ' + worker.url);
}
});
}
但是,我仍然看到第一次重新加载后连接了两个工作人员,第二次重新加载后连接了三个工作人员,依此类推。我确保我的监听器仅初始化一次。以前有人遇到过这个吗?是我使用方法不正确吗?谢谢!卢卡
最佳答案
不,你没有正确使用它。 pagemod 只需要设置一次。准备就绪后它会自动连接。您创建的页面 mod 将附加到每个新页面 (["*"]
)。每次加载新页面时,都会创建一个附加到每个新选项卡的新 pagemod...
如果您想在每个页面中插入内容脚本,只需删除就绪监听器即可。
mod = this.pageMod.PageMod({
include: ["*"],
contentScriptFile: ["./full_page.js"],
attachTo: ["top", "frame", "existing"],
onAttach: function(worker) {
Logger.log('---------> worker.url is ' + worker.url);
}
});
如果您想对特定选项卡使用就绪监听器,attach a script to the tab :
tabs.on('ready', function(tab) {
var worker = tab.attach({
contentScriptFile: ["./full_page.js"]
});
Logger.log('---------> worker.url is ' + worker.url);
}
关于javascript - pageMod 多次附加 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31083725/
我目前正在制作一个 Firefox 扩展,但是当我浏览到特定网址时,我无法运行该功能。 在我的 chrome.manifest 中,我有 overlay chrome://browser/conten
我在开发扩展时遇到了这个问题。我根据选项卡就绪事件将 pageMod 附加到页面以修改页面的内容,但是当我重新加载页面时,工作人员似乎又附加了一次,因此在 1 次重新加载后,它会为同一网址加载 2 个
我有一个 SDK 扩展,可以在页面上注入(inject)脚本。在插件选项中有 1 个 bool 用于打开或关闭该脚本。 var pageMod = require("sdk/page-mod"); v
是否可以使用间隔更新它?我试过: var timers = require("timers"); var pageMod = require("page-mod"); var mystyle = ..
我正在尝试在我的 Firefox 扩展中动态创建一个全局函数: window.performAction= function() { ... }; 我现在知道窗口是由 XrayWrapper 问题包裹
我尝试在页面上注入(inject)内容脚本并使用 console.log("starting addon"); pageMod.PageMod({ include: "*",//tempopa
我正在开发用户脚本的 Firefox Addon 版本。使用 page-mod 库,插件语法非常简单。例如: var data = require("self").data; var pageMod
我正在使用addon-sdk。我有一个小部件,单击该小部件后我想对网站执行一些操作(无论是修改页面还是读取深层 DOM)。 这是我读完后的想法https://developer.mozilla.org
我正在开发用户脚本的 Firefox Addon 版本。使用 page-mod 库,插件语法非常简单。例如: var data = require("self").data; var pageMod
我正在使用 toolbar button 制作一个 Firefox 插件由 Erik Vold 编写,我想知道当用户按下工具栏中的按钮时如何启动和停止 pageMod。那有可能吗?我尝试使用此方法注入
我正在使用 Firefox Add-on SDK 将 Chrome 扩展移植到 Firefox。 扩展包含一个连接到 toolbar button 的面板。 (相当于 Chrome 的 popup.h
找到干净的解决方案 我找到了一个非常干净的解决方案,它确实使整个问题变得毫无意义,而且当我问这个问题时我确信它存在......我太无知了,也去寻找它。 在 PageMod 构造函数中使用 attach
我正在尝试使用 pageMod 将图像.prepend()添加到每个谷歌搜索结果链接中。它适用于第一个结果页面,但在加载其他页面或编辑搜索词时效果不佳。这是因为我的脚本是在页面末尾加载的,动态内容更改
我无法在我的插件和附加脚本之间进行通信。 PageMod 的附加事件有效,但它不会将我的 getElements 事件发送到我的列表 getter 。如何正确使用port.emit方法?谢谢! ind
我正在开发一个 Firefox 扩展项目,该项目要求我使用 TAB 键切换页面上的所有链接、提取其 URL、获取其源代码并解析它。 目前,我可以使用 TAB 键通过以下方式切换页面以获取其 URL:
我正在构建一个与 youtube 网站交互的小型插件。为了在页面内注入(inject)自定义脚本,我使用方便的 page-mod像这样: var pageMod = require("sdk/page
我正在尝试基于 page-mod 创建新的 Firefox 扩展我使用了执行js文件的代码 var pageMod = require('sdk/page-mod'); var data = re
我在尝试从 Firefox 插件上下文覆盖 XMLHttpRequest 时遇到了一些麻烦。 我想重写此函数的原因是我想知道何时发出某个请求以触发我的事件之一。 我当前使用的main.js: pa
我在 main.js 中使用以下代码将内容脚本添加到 example.com 上的页面: var self = require("sdk/self"); var pageMod = require("
我正在使用 FF 44.0a2 Developer Edition 和 Firefox Addon SDK 制作 Firefox 插件。我使用 pageMod 内容脚本将 AngularJS 应用程序
我是一名优秀的程序员,十分优秀!