Расширения Chrome и загрузка внешних API Google Uncaught ReferenceError - PullRequest
1 голос
/ 16 октября 2010

Сейчас я нахожусь в процессе создания расширения Chrome. Для этого мне нужно использовать Google Calendar Data API. Вот мой файл manifest.json:

{
"name": "Test",
"version": "1.0",
"background_page": "background.html",
"content_scripts": [
    {
    "matches": ["<all_urls>"],
    "js": ["jquery.js", "content_script.js"]
    }
],
"permissions": [
    "tabs", "http://*/*"
]

}

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

http://www.google.com/jsapi?key=keyhere

Я также пытался добавить

document.write('<script type="text/javascript" src="http://www.google.com/jsapi?key=keyhere"></script>');

в мой файл background.html. Однако всякий раз, когда я звоню

google.load("gdata", "1");

Я получаю сообщение об ошибке Uncaught ReferenceError: Google не определен. Почему мое расширение не загружает этот API, когда оно нормально загружает другие?

Ответы [ 3 ]

1 голос
/ 16 октября 2010

Вы не можете включить внешний скрипт в content_scripts.

Если вы хотите внедрить тег <script>, используя document.write, вам нужно замаскировать косую черту в закрывающем теге:

document.write('...<\/script>');

Вы можете включить свои внешние интерфейсы в фоновую страницу, как обычно:

<script type="text/javascript" src="http://www.google.com/jsapi?key=keyhere"></script>

Если вам нужен этот API-интерфейс в сценариях содержимого, вы можете отправить запрос на фоновую страницу и попросить его выполнить API-зависимые операции, а затем отправить результат обратно в сценарий содержимого.

0 голосов
/ 19 декабря 2010

Это потому, что в вашем коде есть синтаксическая ошибка. У меня была такая же проблема. Я открыл свою страницу background.html в fire fox с включенным плагином fire-bug. Fire-bug консоль должна мне исправить ошибку, я исправил ее и теперь она работает.

0 голосов
/ 16 октября 2010

Спасибо за эту ссылку, это очень помогло. Однако теперь я столкнулся с другой интересной проблемой.

    for (var i = rangeArray.length - 1; i >= 0; i--) {
    var myLink = document.createElement('a'); 
    myLink.setAttribute('onclick','helloThere();'); 
    myLink.innerText ="GO";
    rangeArray[i].insertNode(myLink);
}

Теперь я получаю сообщение об ошибке «helloThere не определено», хотя я поместил эту функцию примерно на десять строк над текущей функцией, имеющей цикл выше, в том же файле. Почему это может происходить? И если я сделаю:

    for (var i = rangeArray.length - 1; i >= 0; i--) {
    var myLink = document.createElement('a'); 
    myLink.setAttribute('onclick','chrome.extension.sendRequest({greeting: "hello"}, function(response) { });'); 
    myLink.innerText ="GO";
    rangeArray[i].insertNode(myLink);
}

Я получаю Uncaught TypeError: Невозможно вызвать метод 'sendRequest' из неопределенного

...