-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

2 つの唯一の違いは、2 番目が即時呼び出し関数式 (IIFE) にラップされていることです。IIFE は、コードをカプセル化して、自由変数がグローバルに表示されないようにします。通常はこれで問題ありませんが、他のサービスがそのコードに依存している場合は表示されません。

于 2013-04-24T17:49:53.047 に答える