我想在我的Firefox中使用翻译器。我从互联网上找到了一些代码。但它不能在我的Firefox中运行。我安装了Greasemonkey。
function loadBingTranslator() {
script = document.createElement('script');
script.src = 'http://dict.bing.com.cn/cloudwidget/Scripts/Generated/BingTranslate_Selection_ShowIcon.js';
script.onload = initBingTranslator;
document.body.appendChild(script);
};
function initBingTranslator() {
BingCW.Init({
MachineTranslation: true,
WebDefinition: true
});
}
loadBingTranslator();
答案 0 :(得分:1)
这样的脚本必须考虑GM沙箱,并且(通常)允许库加载和初始化的时间。请参阅Avoid Common Pitfalls (in Greasemonkey)。
所以,你会像这样使用这个库:
//--- Load the library.
var D = document;
var appTarg = D.getElementsByTagName ('head')[0] || D.body || D.documentElement;
var jsNode = D.createElement ('script');
jsNode.src = 'http://dict.bing.com.cn/cloudwidget/Scripts/Generated/BingTranslate_Selection_ShowIcon.js';
jsNode.addEventListener ("load", initBingTranslatorOnDelay, false);
appTarg.appendChild (jsNode);
//--- Allow some time for the library to initialize after loading.
function initBingTranslatorOnDelay () {
setTimeout (initBingTranslator, 666);
}
//--- Call the library's start-up function, if any. Note needed use of unsafeWindow.
function initBingTranslator () {
unsafeWindow.BingCW.Init ( {
AppID: "GM Foo",
MachineTranslation: true,
WebDefinition: true
} );
}
问题,一些特定于这个问题:
onload
不可用;看到陷阱。事件处理程序无法在GM中以这种方式设置。此外,addEventListener()
无论如何都是最佳做法。
在页面范围内访问JS(包括我们加载的库)需要unsafeWindow
。
该应用似乎需要AppID
。
有时候,使用// @require
指令可以在GM范围而不是页面范围中加载这样的库。
我没有尝试使用这个库,但与其他人一起,它可能是可能的。 不尝试使用不受信任的库,因为一旦进入GM范围内,它们就会获得额外的感染机器的能力。
请勿对“变量名”使用保留字,例如“script”。
答案 1 :(得分:0)
我的JavaScript控制台输出“组件不可用” 第10行:script.onload = initBingTranslator;
所以我把它修改为...... = initBingTranslator(),因为它是一个函数。
现在它说“BingCW没有被定义” 第15行:BingCW.Init({ MachineTranslation:是的, WebDefinition:true });
这是正确的,不确定是否缺少某些东西或者这应该仅适用于IE,我会亲自找到一个谷歌翻译解决方案(或者只是使用现有的附加组件)。
答案 2 :(得分:0)
Bing Dictionary已发布Firefox addon。 你可以直接使用它。