我正在 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) 我已经注册了一个二进制组件chrome.manifest:
binary-component components/linux/myLib.so abi=Linux_x86-gcc3
Run Code Online (Sandbox Code Playgroud)
现在我想通过它的路径ctypes.open().我的问题是:我如何引用二进制组件,以便将其传递给ctypes.open()?
我想点击按钮打开FirefoxOS的原生日期选择器.默认情况下,当输入(显然日期类型)具有焦点时,将显示本机日期选取器.但如何用按钮做到这一点?此外,我不喜欢日期输入,因为我的应用程序是法语,日期输入中显示的日期格式不是法语格式.
我测试了一个隐藏着css的日期输入.单击按钮会触发输入焦点.但在这种情况下,不显示日期选择器.
请不要建议我使用JQuery UI或其他javascript日期选择器.在移动设备上,它们不是非常可用,最好的是原生日期选择器.
谢谢你的帮助
如果我只是愚蠢,我会很高兴她.:)
这是我的代码:
var t16 = new Uint16Array( new Uint8Array([1, 2, 3, 4]));
console.log(t16.BYTES_PER_ELEMENT);
for( var i = 0; i < t16.length; i++)
console.log(t16[i]);
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出:
[02:56:32.197] 2
[02:56:32.197] 1
[02:56:32.197] 2
[02:56:32.197] 3
[02:56:32.197] 4
Run Code Online (Sandbox Code Playgroud)
从我期望的文档:
2
513
1027
Run Code Online (Sandbox Code Playgroud)
在真正的项目中,我使用的是一个tar库,它提供了一个包含我想要读取的16位数据的ArrayBuffer,但我总是只能访问8位值.
我的期望是错的吗?至少我是这样阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays中的 "使用复杂数据结构"部分的方式
对于记录:Firefox是23.0.1,Java是平台SE 7 U25 10.25.2.17,Firefox OS模拟器是W7/64机器上的5.0pre3.
我正在尝试学习如何为firefox做简单的添加.我基于这个教程.
这是我的代码:
LIB/main.js
var self = require("sdk/self");
var button = require("sdk/ui/button/action").ActionButton({
id: "style-tab",
label: "Style Tab",
icon: "./icon-16.png",
onClick: function() {
require("sdk/tabs").activeTab.attach({
contentScriptFile: [self.data.url("jquery.js"), self.data.url("edit-page.js")]
});
}
});Run Code Online (Sandbox Code Playgroud)
数据/编辑page.js
$("body div").css("visibility", "hidden");
$("body").append( $("#addon_hide_page") );
var styles = {
width: "100%",
height: "100%",
backgroud-color: "gray"
}
$("body #addon_hide_page").css(styles);Run Code Online (Sandbox Code Playgroud)
错误输入到此问题的标题中:"消息:SyntaxError:missing:after property id".正如所见:"id"后面有一个":"(main.js中的第四行).发生什么了?
BTW:有没有比在Windows CMD中阅读那些无用语句更好的方法来调试firefox插件?
我正在开发一个Firefox插件.我需要将一堆数据URI图像保存到磁盘.我该如何处理?
我浏览过MDN上的文件I/O片段,但这些片段对我没什么帮助.
有异步和同步方法.我想使用异步方法,但如何使用异步方法编写二进制文件
Components.utils.import("resource://gre/modules/NetUtil.jsm");
Components.utils.import("resource://gre/modules/FileUtils.jsm");
// file is nsIFile
var file = FileUtils.getFile("Desk", ["test.png"]);
// You can also optionally pass a flags parameter here. It defaults to
// FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_TRUNCATE;
var ostream = FileUtils.openSafeFileOutputStream(file);
//base64 image that needs to be saved
image ="iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
// How can I create an inputstream from the image data URI?
var inputstream = createInputstream(image);
// The last argument (the callback) is optional.
NetUtil.asyncCopy(inputstream , ostream, function(status) {
if (!Components.isSuccessCode(status)) { …Run Code Online (Sandbox Code Playgroud) 我正在创建(开发)一个 Firefox 插件,我需要找到浏览器的用户代理。在navigator.userAgent不工作。它表明navigator未定义。
我需要什么 Firefox 附加模块来获取用户代理,还是有其他方法可以在附加模块中找到它?
一直试图让以下代码在firefox附加组件中工作:
var oMyForm = new FormData();
oMyForm.append("username", "Groucho");
oMyForm.append("accountnum", 123456); // number 123456 is immediately converted to string "123456"
// HTML file input user's choice...
oMyForm.append("userfile", fileInputElement.files[0]);
// JavaScript file-like object...
var oFileBody = '<a id="a"><b id="b">hey!</b></a>'; // the body of the new file...
var oBlob = new Blob([oFileBody], { type: "text/xml"});
oMyForm.append("webmasterfile", oBlob);
var oReq = new XMLHttpRequest();
oReq.open("POST", "http://foo.com/submitform.php");
oReq.send(oMyForm);
Run Code Online (Sandbox Code Playgroud)
所以我知道我必须使用XPCOM,但我找不到相同的东西.到目前为止我发现了这个:
var oMyForm = Cc["@mozilla.org/files/formdata;1"].createInstance(Ci.nsIDOMFormData);
oMyForm.append("username", "Groucho");
oMyForm.append("accountnum", 123456); // number 123456 is immediately converted to …Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法可以为简单的内容脚本创建Firefox扩展,而无需使用Add-On SDK和PageMod?通过安装Python和SDK的麻烦,学习如何使用SDK和API,添加不必要的膨胀和抽象层,只是为了执行简单的内容脚本,这似乎有点过分.
我已经尝试过使用XUL浏览器覆盖并在那里注入脚本,但是在browser.xul上下文中注入所有内容而不是document.body增加了很多复杂性......
那么在html文档而不是XUL文档中注入一些脚本和css文件最简单,最轻量级的方法是什么?
如果我不首先使用 WM_SETICON 来设置图标,那么 WM_GETICON 总是返回 0。这很奇怪。请帮忙。
这是我的代码,可以复制粘贴到暂存器并运行。
当执行SendMessage(targetWindow_handle, WM_GETICON , ICON_SMALL, ctypes.voidptr_t(0)), hIconSmall_origandhIconBig_orig时总是返回 0 我不知道为什么。如果您首先在窗口上使用 WM_SETICON,那么它会正确获取 HICON,但整个目的是获取默认图标。
Cu.import('resource://gre/modules/ctypes.jsm');
var user32 = ctypes.open('user32.dll');
/* http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx
* LRESULT WINAPI SendMessage(
* __in HWND hWnd,
* __in UINT Msg,
* __in WPARAM wParam,
* __in LPARAM lParam
* );
*/
var SendMessage = user32.declare('SendMessageW', ctypes.winapi_abi, ctypes.uintptr_t,
ctypes.voidptr_t,
ctypes.unsigned_int,
ctypes.int32_t,
ctypes.voidptr_t
);
var WM_GETICON = 0x007F;
var WM_SETICON = 0x0080;
var ICON_SMALL = 0;
var ICON_BIG = 1;
var …Run Code Online (Sandbox Code Playgroud) javascript ×8
firefox ×6
firefox-os ×2
jsctypes ×2
c++ ×1
datepicker ×1
icons ×1
mobile ×1
packaging ×1
user32 ×1
xpcom ×1