我是javascript的新手。如何匿名Google Pagespeed?
这是原始代码: http://pastebin.com/xRbTekDA。它在我加载页面时有效
以下是匿名代码:http://pastebin.com/fj9rP7FM。每次加载页面时都会显示一个javascript错误。它说“ReferenceError:runPagespeedCallbacks未定义”,因为我对它进行了匿名化。
如何对原始代码进行匿名化?
答案 0 :(得分:1)
您遇到的问题是代码期望调用的方法不在范围内。因此,如果您稍微修改代码,这将消除您的错误。此代码应解决此问题。 http://pastebin.com/RrQ2848j
注意我只是返回回调函数并将其指定为变量。您可以采取其他方法,但需要在全球范围内进行调用。
原因是正在创建脚本块以获取脚本和数据,因为AJAX(XHR)请求会违反在yourdomain.com上执行时尝试联系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);
}
答案 1 :(得分:0)
两者之间的唯一区别是第二个包含在一个立即调用的函数表达式(IIFE)中。 IIFE封装代码,以便自由变量不是全局可见的。通常这是一件好事,但如果其他服务依赖于该代码,则它将不可见。