小编nma*_*ier的帖子

不推荐在主线程上使用同步XMLHttpRequest

为什么此消息突然出现在Firefox控制台中?

我正在使用JQuery 1.7.1.

在我的应用程序中我可以做什么导致此消息开始出现?

javascript ajax firefox jquery

37
推荐指数
2
解决办法
5万
查看次数

在Firefox扩展中更改HTTP响应

如何在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)

javascript firefox-addon

18
推荐指数
2
解决办法
9054
查看次数

Firefox onLocationChange并不总是被调用

我正在构建一个firefox扩展,它创建了几个隐藏的浏览器元素.

我想addProgressListener()为我加载的页面处理onLocationChange.但是,我的处理程序并不总是被调用.

更具体地说,这就是我正在做的事情:

  1. 创建一个浏览器元素,而不设置其src属性
  2. 将它附加到另一个元素
  3. 添加一个侦听onLocationChange浏览器元素的进度监听器
  4. loadURIWithFlags()使用所需的网址调用并发布数据

我希望每次在4之后调用处理程序,但有时它不会(虽然它似乎卡在同一页面上).

有趣的是,如果我将3和4包裹在内部,setTimeout(..., 5000);它每次都有效.

我也试过改变一些步骤,但它没有任何效果.

更大的图片:当浏览器contentDocument是新加载的页面(重定向后)时,我希望得到可靠的通知.有一个更好的方法吗?

更新:我已经在mozilla的bug跟踪器上打开了一个错误,其中有一个显示此行为的最小xulrunner应用程序,以防任何人想要仔细查看:https://bugzilla.mozilla.org/show_bug.cgi?id = 941414

javascript firefox xul firefox-addon settimeout

10
推荐指数
1
解决办法
948
查看次数

javascript readAsArrayBuffer返回空数组缓冲区

我试图使用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...为此我需要缓冲数据...

javascript arraybuffer audiocontext

9
推荐指数
2
解决办法
2万
查看次数

查找与DOM窗口关联的选项卡

我在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)

javascript mozilla firefox-addon

7
推荐指数
1
解决办法
1796
查看次数

更改运行firefox配置文件的图标

我正在使用Win7,但正在寻找一个跨操作系统解决方案,但这甚至不能在我的Win7中工作.我正在尝试更改当前配置文件的图标.所以我做的是:

  1. 我创建了firefox.exe的快捷方式并将其移动到我的文档中
  2. 右键单击此快捷方式,然后更改图标
  3. 但是在firefox中,任务栏显示正常的firefox图标,左上角的图标也是如此(参见附图pz)

我该如何更改此图标?

谢谢

在此输入图像描述

这是我在ask.mo上提出的另一个主题,试图问同样的事情:https://ask.mozilla.org/question/725/custom-icon-per-profile/

firefox icons firefox-addon

6
推荐指数
1
解决办法
4916
查看次数

Firefox扩展自定义字体

我正在使用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将自定义字体加载到网页中!

javascript fonts firefox-addon firefox-addon-sdk

6
推荐指数
1
解决办法
2424
查看次数

FireFox Addon:如何覆盖原生js函数

我试图使用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做什么来运行命令,以便我可以在我的插件代码中执行相同的操作.

javascript firefox firefox-addon firefox-addon-sdk

6
推荐指数
1
解决办法
1138
查看次数

libuv undefined对uv_loop_new的引用

编译后,我正在尝试运行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"

c libuv

5
推荐指数
2
解决办法
2971
查看次数

参考错误:未定义 TextEncoder

我正在 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 firefox-addon firefox-addon-sdk

5
推荐指数
6
解决办法
2万
查看次数