使用Greasemonkey将外部JS库加载到页面中

时间:2011-07-03 10:29:43

标签: firefox greasemonkey javascript

我想在我的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();

3 个答案:

答案 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
    } );
}



问题,一些特定于这个问题:

  1. onload不可用;看到陷阱。事件处理程序无法在GM中以这种方式设置。此外,addEventListener()无论如何都是最佳做法。

  2. 在页面范围内访问JS(包括我们加载的库)需要unsafeWindow

  3. 该应用似乎需要AppID

  4. 有时候,使用// @require指令可以在GM范围而不是页面范围中加载这样的库。
    我没有尝试使用这个库,但与其他人一起,它可能是可能的。 尝试使用不受信任的库,因为一旦进入GM范围内,它们就会获得额外的感染机器的能力。

  5. 请勿对“变量名”使用保留字,例如“script”。

答案 1 :(得分:0)

我的JavaScript控制台输出“组件不可用” 第10行:script.onload = initBingTranslator;

所以我把它修改为...... = initBingTranslator(),因为它是一个函数。

现在它说“BingCW没有被定义” 第15行:BingCW.Init({         MachineTranslation:是的,         WebDefinition:true     });

这是正确的,不确定是否缺少某些东西或者这应该仅适用于IE,我会亲自找到一个谷歌翻译解决方案(或者只是使用现有的附加组件)。

答案 2 :(得分:0)

Bing Dictionary已发布Firefox addon。 你可以直接使用它。