1

jquery 1.6 にリンクするスクリプトを印刷するか、ローカルでホストされているコピーにリンクするかを決定する前に、Google がまだ jquery 1.6 のコピーをホストしているかどうかを確認する単純な perl サブルーチンがあります。

これは私が使用しているコードのコピーです。

my $jquery_host = "http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js";
my $header = LWP::Simple::head($jquery_host);

if(defined $header) {
    return qq{<script type="text/javascript" src="$jquery_host"></script>};
}
else {
    return qq{<script type="text/javascript" src="$localPath"></script>};
}

このコマンド ラインでこのコードを実行すると、応答を取得するのに問題はなく、Google の jquery のコピーにリンクするスクリプト タグが適切に出力されます。しかし、html ページを構築している perl スクリプトから実際に呼び出すと、毎回何も検出されず、独自のコピーにリンクするスクリプト タグが出力されます。

この接続を停止している可能性のあるアクセス許可またはその他の種類のバリアは何ですか?

ご協力いただきありがとうございます。

注: これは、これまでのところローカル テスト サーバーでのみ実行されています。コマンド ラインもテスト サーバーで実行されています。

4

2 に答える 2

1

あなたのコードが単独で動作することを確認できました。ヘッダーへの割り当てを if ステートメントにラップしてみてください。実際、URL 文字列もインライン化します。あなたを台無しにする可能性のある唯一の他のことは、サーバースクリプトが、google.comからjQueryをフェッチできないプロキシまたはtcpラッパーを使用するマシンで実行されていることです。これらの非常に特定の非常に局所的な問題については、私たちは実際にあなたを助けることはできません.

私が推測しているだけなら、あなたは複数の Perl 環境を実行していて、コマンド ラインは問題なく機能する適切なバージョンを使用していますが、Web サーバーは別のバージョンを呼び出していると言えます。AppEngine で使用するために提案されたもののように、あなたがしていることを壊すような方法で強化されました。しかし、上記の私の提案は、このスニペットの周りのコードが、使用している変数をいじっている可能性があるという考えに基づいています。mod_perl での io ソケットの使用に関して、この種の問題が発生するようです。

プログラムの抜粋:

$ perl -MLWP::Simple -e '
if(head("http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js")) {
    print qq{<script type="text/javascript"
      src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js">
    </script>};
} else {
    print qq{<script type="text/javascript" src="$localPath"></script>};
}'

出力:

<script type="text/javascript"
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js">
</script>

$scriptPathまた、一部が jQuery パスまたは のいずれかに割り当てられるようにこれを$localPath記述し、if ステートメントを過ぎて、現在決定されている を使用してスクリプト タグを 1 回だけ出力し$scriptPathます。しかし、それはおそらく私だけです。

于 2011-10-31T20:11:23.660 に答える
0

コードが機能しない理由はわかりませんが、とにかくそれを使用するべきではありません。サーバーがアクセスできるからといってajax.googleapis.com、ユーザーのブラウザーがアクセスできるとは限りません。

代わりに、クライアントの JavaScript でフォールバックを実行してください。この回答に基づくサンプルコードを次に示します。

return <<"END";
<script type="text/javascript" src="$jquery_host"></script>
<script type="text/javascript">
if (typeof jQuery == 'undefined') document.write(
    '<'+'script type="text/javascript" src="$localPath"><'+'/script>'
);
</script>
END
于 2011-11-01T21:58:39.917 に答える