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

Firefox 使用Greasemonkey将外部JS库加载到页面中,firefox,greasemonkey,javascript,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

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

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

所以我把它改成了…=initBingTranslator(),因为它是一个函数

现在它说“BingCW没有定义” 第15行:BingCW.Init({ 机器翻译:对, WebDefinition:true });


这是对的,我不确定是否有什么东西丢失了,或者这只适用于IE,我会亲自找一个Google translator解决方案(或者只使用现有的附加组件)。

这样的脚本必须考虑GM沙盒,并且(通常)允许库加载和初始化时间。看

因此,您可以这样使用此库:

//--- 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”


  • 必应词典已经出版了一本。
    你可以直接使用它。

    dict.bing.com.cn
    --你确定你没有安装特洛伊木马吗?“我想在我的Firefox中安装一个翻译器”你的意思是像这些插件一样:| |?(只是一个示例,还有更多)这可能是Greasemonkey沙盒处理javascript的方式。虽然我以前在插入脚本标记时没有遇到任何问题…但是您是否可以从JavaScript控制台或Firebug中获得任何错误?它没有显示来自控制台的脚本的任何内容。是否可以将其写入不插入标记的函数中?