-2

我是 JavaScript 新手。如何匿名化 Google Pagespeed?

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

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

如何匿名化该原始代码?

4

2 回答 2

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);
}
于 2013-04-24T17:55:34.560 回答
0

两者之间的唯一区别是第二个包装在立即调用的函数表达式(IIFE)中。IIFE 封装了代码,因此自由变量不是全局可见的。通常这是一件好事,但如果其他服务依赖于该代码,它将不可见。

于 2013-04-24T17:49:53.047 回答