Проблема, с которой вы сталкиваетесь, - это метод, который код, ожидающий вызова, не входит в объем. Поэтому, если вы немного измените код, это должно избавить вас от ошибки. Этот код должен устранить проблему. http://pastebin.com/RrQ2848j
Обратите внимание, что я просто возвращаю функцию обратного вызова и назначаю ее как переменную. Существуют и другие подходы, которые вы можете предпринять, но в глобальном масштабе для вызова требуется нечто.
Причина этого заключается в создании блока сценария для получения сценария и данных, поскольку запрос AJAX (XHR) будет нарушать политику одного и того же происхождения, пытающуюся связаться с google.com во время выполнения на вашем домене. Когда скрипт загружен, ожидается, что он вызовет функцию в глобальной области, чтобы передать в нее некоторые данные. Эта функция названа в строке запроса атрибута SRC при создании блока сценария, как показано здесь:
function runPagespeed() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
var query = [
'url=' + YN_URL,
'callback=runPagespeedCallbacks',
'key=' + API_KEY
].join('&');
s.src = API_URL + query;
document.head.insertBefore(s, null);
}
Спасибо. Он работает – yan
Вы понимаете, почему? Я чувствую, что, поскольку вы студент, я не обязан отвечать за то, чтобы вы знали, почему сейчас. :-) –
Исправьте меня, если я ошибаюсь. Вы вернули функцию runPagespeedCallbacks() и назначили ее переменной runPagespeedCallbacks (как вы сказали), поэтому функция обратного вызова будет работать – yan