1

Сейчас я занимаюсь созданием расширения Chrome. Для этого мне нужно использовать API данных календаря Google. Вот мой manifest.json файл:Расширения Chrome и загрузка внешних API Google Uncaught ReferenceError

{ 
"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"); 

У меня есть сообщение об ошибке, которое говорит об ошибке «Нет данных»: google не определен. Почему мое расширение не загружает этот api, когда он загружает другие?

ответ

1

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

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

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

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

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

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

+0

Я попытался просто добавить его, как обычно, на страницу фона, и это тоже не сработает. Мне нужно это в content_scripts, но я думал, что загрузить его в background.html автоматически позволит мне использовать его в content_scripts. – joshholat

+0

@joshholat Фоновая страница в значительной степени просто обычная страница без каких-либо ограничений. Если он там не работает, проблема в коде. Поместите свою фоновую страницу в корневой каталог веб-сервера и откройте ее в браузере - я уверен, что она тоже не сработает. – serg

+0

Также, если api js на странице фона не загружает его автоматически в сценарии содержания, они полностью изолированы. Чтобы общаться между ними, вам нужно отправлять запросы туда и обратно. – serg

0

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

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

Я получаю неперехваченным TypeError: Не удается вызвать метод «SendRequest» неопределенной

+0

Возможно, было бы лучше поставить его в качестве другого вопроса, поскольку он не связан. Контент-скрипт и фактическая страница не разделяют пространство переменных, они используют только DOM. – serg

+0

Не используйте строки, используйте ссылки на функции. Вместо 'myLink.setAttribute ('onclick', 'helloThere();');' say 'myLink.onclick = helloThere' –

0

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

Смежные вопросы