为什么此消息突然出现在Firefox控制台中?
我正在使用JQuery 1.7.1.
在我的应用程序中我可以做什么导致此消息开始出现?
如何在Firefox扩展中更改HTTP响应正文?我已经使用下面的代码设置了一个http-on-examine-response观察者和一个nsIStreamListener对象.在我获取数据,解析并更改它之后,如何将更改的响应推送回firefox浏览器?例如,假设我在启用扩展程序的情况下访问Google.com,扩展程序应截取响应并将"google"的每次更改更改为"goggle".因此,当页面加载时,用户将在任何地方看到"goggle".
function TmSteroidsObserver()
{
this.register();
}
TmSteroidsObserver.prototype = {
observe: function(subject, topic, data) {
if (topic == "http-on-examine-response") {
}
else if (topic == "http-on-modify-request") {
var channel = subject.QueryInterface(Components.interfaces.nsIChannel);
var listener = new StreamListener(channel);
}
},
register: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(listener, "http-on-modify-request", false);
observerService.addObserver(listener, "http-on-examine-response", false);
},
unregister: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(this, "http-on-modify-request");
observerService.removeObserver(this, "http-on-examine-response");
},
QueryInterface : function(aIID) {
if (aIID.equals(Components.interfaces.nsISupports) ||
aIID.equals(Components.interfaces.nsIObserver))
return this;
throw Components.results.NS_NOINTERFACE;
}
}
function …Run Code Online (Sandbox Code Playgroud) 我正在构建一个firefox扩展,它创建了几个隐藏的浏览器元素.
我想addProgressListener()为我加载的页面处理onLocationChange.但是,我的处理程序并不总是被调用.
更具体地说,这就是我正在做的事情:
src属性onLocationChange浏览器元素的进度监听器loadURIWithFlags()使用所需的网址调用并发布数据我希望每次在4之后调用处理程序,但有时它不会(虽然它似乎卡在同一页面上).
有趣的是,如果我将3和4包裹在内部,setTimeout(..., 5000);它每次都有效.
我也试过改变一些步骤,但它没有任何效果.
更大的图片:当浏览器contentDocument是新加载的页面(重定向后)时,我希望得到可靠的通知.有一个更好的方法吗?
更新:我已经在mozilla的bug跟踪器上打开了一个错误,其中有一个显示此行为的最小xulrunner应用程序,以防任何人想要仔细查看:https://bugzilla.mozilla.org/show_bug.cgi?id = 941414
我试图使用FileReader readAsArrayBuffer属性读取本地文件.读取成功,在"onload"回调中,我在reader.result中看到了Array Buffer对象.但是Array Buffer只是空的.设置长度,但不设置数据.我如何获得这些数据?
这是我的代码
<!DOCTYPE html>
<html>
<body>
<input type="file" id="file" />
</body>
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
var selFile = files[0];
var reader = new FileReader();
reader.onload = function(e) {
console.log(e.target.result);
};
reader.onerror = function(e) {
console.log(e);
};
reader.readAsArrayBuffer(selFile);
}
document.getElementById('file').addEventListener('change', handleFileSelect, false);
</script>
</html>
Run Code Online (Sandbox Code Playgroud)
reader.result的控制台输出
e.target.result
ArrayBuffer {}
e.target.result.byteLength
25312
Run Code Online (Sandbox Code Playgroud)
谁能告诉我如何获取这些数据?有一些安全问题吗?没有错误,不执行onerror.
来自评论:你能告诉我如何访问缓冲区内容吗?我实际上正在尝试播放音频文件AudioContext...为此我需要缓冲数据...
我在Firefox扩展程序TryAgain中添加了一些新功能,用于捕获HTTP错误代码(例如500)并在一段时间后自动重试加载页面.
捕获代码非常有效,我正在尝试计算重试总次数,并使用Session Store将其存储在选项卡中.不幸的是,现在我正在获取对DOM窗口的引用(通过interfaceRequestor.getInterface(Components.interfaces.nsIDOMWindow)),但是我需要一个对tab的引用,这是一个nsIDOMNode根据setTabValue()上的nsISessionStore文档.
我到目前为止(我已经剪断了这个例子中的实际重试):
// This function implements the nsIObserverService interface and observes
// the status of all HTTP channels
observe : function(aSubject, aTopic, aData) {
var httpChannel = aSubject
.QueryInterface(Components.interfaces.nsIHttpChannel);
if (httpChannel.responseStatus == 500) {
var domWindow;
try {
var notificationCallbacks;
if (httpChannel.notificationCallbacks) {
notificationCallbacks = httpChannel.notificationCallbacks;
} else {
notificationCallbacks = aSubject.loadGroup
.notificationCallbacks;
}
var interfaceRequestor = notificationCallbacks
.QueryInterface(Components.interfaces
.nsIInterfaceRequestor);
domWindow = interfaceRequestor
.getInterface(Components.interfaces.nsIDOMWindow);
} catch (e) { …Run Code Online (Sandbox Code Playgroud) 我正在使用Win7,但正在寻找一个跨操作系统解决方案,但这甚至不能在我的Win7中工作.我正在尝试更改当前配置文件的图标.所以我做的是:
我该如何更改此图标?
谢谢

这是我在ask.mo上提出的另一个主题,试图问同样的事情:https://ask.mozilla.org/question/725/custom-icon-per-profile/
我正在使用Firefox Add-on SDK创建扩展程序并执行PageMod.这段代码在main.js.
...
exports.main = function() {
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*",
contentScriptWhen: 'end',
contentStyleFile: [
self.data.url("css/style.css"),
self.data.url("css/font-awesome.css")
],
contentScriptFile: [
self.data.url("js/jquery.js"),
self.data.url("js/spritzify.js")
],
onAttach: function onAttach(worker) {
worker.postMessage("Hello World");
}
});
};
...
Run Code Online (Sandbox Code Playgroud)
css/font-awesome.css虽然字体文件没有,但我会加载到页面中.
@font-face {
font-family: 'FontAwesome';
src: url('fonts/fontawesome-webfont.eot?v=4.1.0');
src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.1.0') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.1.0') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.1.0') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.1.0#fontawesomeregular') format('svg');
font-weight: normal;
font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)
fonts文件夹位于我的扩展程序的数据文件夹中.有人可以解释我如何使用PageMod将自定义字体加载到网页中!
我试图使用pageMod在页面加载上运行脚本:但我看不到它的效果
var data = require("sdk/self").data;
var attachTo = require("sdk/content/mod").attachTo;
var pageMod = require("sdk/page-mod");
pageMod.PageMod({
include: "*",
contentScriptWhen: "start",
allow:true,
attachTo: ["existing", "top"],
contentScriptFile: [data.url("jquery-2.1.1.min.js"),
data.url("somejs.js")],
})
Run Code Online (Sandbox Code Playgroud)
在我的somejs.js文件中,我有覆盖表单提交功能:
document.forms['frmMain'].submit=function submit(){alert("Submitting")...
...do some stuff
};
Run Code Online (Sandbox Code Playgroud)
在我的网页上有一个提交表单的按钮:
frmMain.method="post"
frmMain.action = "someurl";
frmMain.submit();
Run Code Online (Sandbox Code Playgroud)
但是当我点击按钮时,它不会调用我在上面定义的覆盖方法.当我使用firebug控制台覆盖该功能时它的工作原理!那么firebug做什么来运行命令,以便我可以在我的插件代码中执行相同的操作.
编译后,我正在尝试运行libuv示例程序:
#include <stdio.h>
#include <uv.h>
int main() {
uv_loop_t *loop = uv_loop_new();
printf("Now quitting.\n");
uv_run(loop, UV_RUN_DEFAULT);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,当尝试运行时,我收到以下错误:
**/tmp/ccHTpspB.o: In function `main':
main.c:(.text+0x9): undefined reference to `uv_loop_new'
main.c:(.text+0x28): undefined reference to `uv_run'
collect2: error: ld returned 1 exit status**
Run Code Online (Sandbox Code Playgroud)
我哪里做错了 ?
PS:它不适用于#include"uv.h"
我正在 Linux 上的 Firefox - 24 中编写一个简单的插件。我收到错误:
ReferenceError: TextEncoder is not defined
Run Code Online (Sandbox Code Playgroud)
当我这样做时: var encoder = new TextEncoder(); 我正在使用的功能是:
function write_text(filename, text) {
var encoder = new TextEncoder();
var data = encoder.encode(text);
Task.spawn(function() {
let pfh = OS.File.open("/tmp/foo", {append: true});
yield pfh.write(text);
yield pfh.flush();
yield pfh.close();
});
}
Run Code Online (Sandbox Code Playgroud) javascript ×8
firefox ×4
ajax ×1
arraybuffer ×1
audiocontext ×1
c ×1
fonts ×1
icons ×1
jquery ×1
libuv ×1
mozilla ×1
settimeout ×1
xul ×1