Использование удаленного JavaScript в расширениях Chrome

Есть ли способ получить удаленный файл JS для расширения Chrome?

Мой manifest.json выглядит так:

{
    "name": "My Extension",
    "version": "0.1",
    "content_scripts": [
    {
        "matches": ["http://*/*"],
        "js": ["jquery.js", "main.js"],
        "run_at": "document_end",
        "all_frames": true
    }
    ]
}

Я хочу использовать один JavaScript API, который ограничен использованием в выбранном домене, поэтому я не могу вставить его просто на загруженную страницу в Chrome следующим образом:

$('head').append('<script src="http://example.com/myApi.js?key=%key%"></script>');

потому что JS API предупредил меня, что я использую его по URL-адресу, который я им не дал.

Я хочу просто использовать некоторые функции из этого удаленного JS. К счастью, ключ API можно зарегистрировать и использовать на локальном хосте.

Но я понятия не имею, как решить эту проблему - куда поместить удаленный JS-файл, чтобы иметь возможность его использовать.

У меня есть идея создать "виртуальный DOM", но, возможно, это не так. решение, потому что код JS API не может быть выполнен.

Куда вставить код? Какая-то фоновая страница??


person Radek Simko    schedule 23.07.2010    source источник
comment
Возможно, одним из решений было бы вставить iframe моей страницы (размещенной где-то в моем домене и зарегистрированной в API) и вызывать функции JS отсюда? Это решение могло бы работать, но оно не зависит от доступности моего домена/сервера. Я хотел бы выполнить код в какой-нибудь песочнице в Chrome (с точки зрения API - на локальном хосте).   -  person Radek Simko    schedule 23.07.2010
comment
Похоже, вам просто нужно посетить http://example.com/myApi.js?key=%key% в браузере, сохранить файл, назвать его external.js и поместить в то же место, где у вас есть jquery.js и main.js (также добавить его в манифест следующим образом: ["jquery.js", "main.js", "external.js"]).   -  person Adam    schedule 24.07.2010


Ответы (3)


Попробуйте этот скрипт:

if(window.top == window && !document.getElementById('molseek'))
{
    if (document && document.doctype && document.doctype.name && document.doctype.name.toLowerCase() == 'html') {
        loadToolTip();
    }
    // Weird guest... but if we got an head element, try to validate even if no doctype...
    else if (document && document.getElementsByTagName('head').length) {
        loadToolTip();
    }
    // Weird guest #2... but if we got title element, try to validate even if no doctype nor head...
    else if (document && document.getElementsByTagName('title').length) {
        loadToolTip();
    }
}

function loadToolTip(){

    (function(s){
        if(!window.molseek){
            s.src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js';
            (document.getElementsByTagName("head").item(0)||document.body).appendChild(s)
        }
    })(document.createElement('script'));
    (function(s){
        if(!window.apture){
            s.src='https://location';
            (document.getElementsByTagName("head").item(0)||document.body).appendChild(s)
        }
    })(document.createElement('script'));

}
person onsy    schedule 25.10.2010

Ты пробовал :

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://example.com/myApi.js?key=%key%';
document.getElementsByTagName('head')[0].appendChild(script); 

Я использую его в своем расширении Google Chrome и прекрасно работает.

person Shikiryu    schedule 25.10.2010
comment
Я не мог заставить это работать, я использую его на странице background.html, а не во всплывающем окне, может быть поэтому? - person Doug Molineux; 22.04.2011

В настоящее время не удается найти способ удаленного размещения кода для расширения, но при этом разрешить этому коду использовать вызовы chrome.* javascript.

person Devin Rhode    schedule 02.06.2011