我有一个插件正确工作到FF 47.我知道使用e10s FF 48,它有一些兼容性问题。这里是我认为它们受浏览器的新多进程模型影响的代码行的简短列表:
1.let { Cc, Ci } = require('chrome');
2.const { Cu } = require("chrome");
3.require("sdk/tabs").on("ready",logURL);
4.Cu.import("resource://gre/modules/FileUtils.jsm");
5.const {TextDecoder, TextEncoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
6. file = FileUtils.getFile("Home", [".cp.txt"]); //reopen the file just saved
7. var txt = "";
var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
var cstream = Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream);
fstream.init(file, -1, 0, 0); cstream.init(fstream, "UTF-8", 0, 0); let str = {};
let read = 0;
do {
read = cstream.readString(0xffffffff, str); // read as much as we can and put it in str.value
txt += str.value;
} while (read != 0);
cstream.close(); // this closes fstream // use 0x02 | 0x10 to open file for appending. // save the domain option in file
foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
converter.init(foStream, "UTF-8", 0, 0);
var sEP = txt + '\n' + 'h' + '\n'; // encrypt new path converter.writeString(sEP); converter.close(); // this closes foStream
console.log('saved h'); }
首先,我需要知道,如果所有这些元素在新FF中都有问题(我很确定6和7不兼容 - XUL和XPCOM已经过时并且在同一个线程上工作 - 但不是所以确定其他行),最后如果有48版本的代理结构,以解决相同的问题(输入/输出等)。特别是,附加组件使用选项卡机制(用于读取选项卡的URL)是必不可少的。谢谢您的帮助。
答案 0 :(得分:2)
这些问题都与e10无关,它们都是es6和xpcom问题。
如果你在一个framecript中使用它,那么它是一个e10s的问题,但是我避免在framecripts中使用xpcom,尝试使用来自framescript的消息传递到bootstrap,例如 - https://github.com/Noitidart/CommPlayground
重播1和2:如果您未在LDFLAGS
'ed脚本中使用Cu
Ci
,require
和let
就可以了。
回复7:不要这样做,很快就会被弃用,并且不是主要的友好。它可以锁定它。使用OS.File。
Re 4和6:我建议你做const
。这是XPCOM,但它使用的是常见的Services.dirsvc.get('Home', Ci.nsIFile).path;
模块,不太可能被驱逐。此外,Services.jsm
缓存文件,因此它比Services.dirsvc.get
快得多。但是,理想情况下,您应该使用导入FileUtils
时出现的OS.Path.join
和OS.Constants.Path
。所以你会做osfile.jsm
- 尽可能避免使用XPCOM。
回复3:没关系。