Загрузите внешнюю библиотеку JS на страницу, используя Greasemonkey - PullRequest
0 голосов
/ 03 июля 2011

Я хочу переводчик в моем 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 ]

1 голос
/ 04 июля 2011

Такой скрипт должен учитывать песочницу GM, а также (обычно) предоставлять время для загрузки и инициализации библиотеки.См. Избегайте распространенных ошибок (в 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. Иногда библиотеки, подобные этой, могут быть загружены в область GM вместо области страницы, используя директиву // @require.
    Я не пробовал это с этой библиотекой, но с другими это возможно. не попробуйте это с ненадежными библиотеками, поскольку они получают дополнительные возможности для заражения вашего компьютера, попав в область действия GM.

  5. Не используйте зарезервированные слова, например«script», для имен переменных.

0 голосов
/ 03 ноября 2011

Словарь Bing опубликовал аддон Firefox . Вы можете использовать его напрямую.

0 голосов
/ 03 июля 2011

Моя консоль JavaScript выводит строку «Компонент недоступен», строка 10: script.onload = initBingTranslator;

Поэтому я исправил изменение на ... = initBingTranslator (), потому что это функция.

Теперь он говорит: «BingCW не определен» Строка 15: BingCW.Init ({MachineTranslation: true, WebDefinition: true});

И это правильно, не уверен, что что-то отсутствует илиэто должно работать только в IE, я бы лично нашел решение для переводчика Google (или просто использовал существующее дополнение).

...