匿名化Google Pagespeed

时间:2013-04-24 17:39:31

标签: javascript anonymous-function

我是javascript的新手。如何匿名Google Pagespeed?

这是原始代码: http://pastebin.com/xRbTekDA。它在我加载页面时有效

以下是匿名代码:http://pastebin.com/fj9rP7FM。每次加载页面时都会显示一个javascript错误。它说“ReferenceError:runPagespeedCallbacks未定义”,因为我对它进行了匿名化。

如何对原始代码进行匿名化?

2 个答案:

答案 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封装代码,以便自由变量不是全局可见的。通常这是一件好事,但如果其他服务依赖于该代码,则它将不可见。