30

amq.js (ActiveMQ) とGoogle Mapsの両方を使用しています。この順序でスクリプトをロードします

<head>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
    <title>AMQ & Maps Demo</title>

    <!-- Stylesheet -->
    <link rel="stylesheet" type="text/css" href="style.css"></link>

    <!-- Google APIs -->
    <script type="text/javascript" src="http://www.google.com/jsapi?key=abcdefg"></script>

    <!-- Active MQ -->
    <script type="text/javascript" src="amq/amq.js"></script>
    <script type="text/javascript">amq.uri='amq';</script>

    <!-- Application -->
    <script type="text/javascript" src="application.js"></script>
</head>

ただし、私の application.js ではマップを正常にロードしますが、AMQ でトピックをサブスクライブしようとするとエラーが発生します。AMQ は、Firefox のエラー コンソールにオブジェクトが定義されていないと表示されるプロトタイプに依存します。スクリプトの読み込みが完了する前に amq オブジェクトを使用することに問題があると思います。application.js で使用する前に、両方のスクリプトが確実に読み込まれるようにする方法はありますか?

Google には、すばらしい関数呼び出しgoogle.setOnLoadCallback(initialize);があります。amq.js にこのようなものがあるかどうかはわかりません。

4

8 に答える 8

43

クロスドメイン スクリプトは、サイト自体のスクリプトの後に読み込まれるため、エラーが発生します。興味深いことに、ここでは誰もこれを知りません。

于 2011-02-28T21:45:55.630 に答える
27

application.js で使用する前に、両方のスクリプトが確実に読み込まれるようにする方法はありますか?

JavaScript ファイルは順番にロードしてブロックする必要があるため、依存しているスクリプトが異常なことをしていない限り、他のファイルの後に application.js をロードするだけで済みます。

ノンブロッキング JavaScript ダウンロードには、スクリプトの読み込み方法に関する情報が含まれています (また、ブロッキングを無効にするためのテクニックについても説明しています)。

于 2008-08-21T04:46:39.690 に答える
9

jqueryでは、次を使用できます:

$(document).ready(function(){/*do stuff here*/});

これにより、javascript がロードされ、DOM の準備が整っていることを確認してから作業を行うことができます。

プロトタイプでは、これはうまくいくように見えます

document.observe("dom:loaded", function() {/*do stuff here*/});

あなたの問題を正しく理解していれば..それが役立つと思います..

これを行うためにライブラリに依存したくない場合...これはうまくいくと思います:

<script>
   function doIt() {/*do stuff here*/}
</script>
<body onLoad="doIt();"></body>
于 2008-08-20T23:17:30.353 に答える
7

私はこれと同様の問題を抱えていましたが、スクリプトが1つだけでした。私が思いついた解決策は、Hereを使用addEventListener("load",fn,false)して作成されたscriptオブジェクトを使用することでしたdocument.createElement('script')。これは、標準のJSファイルをロードし、「ロード後」スクリプトを追加できる最後の関数です。

function addJavaScript( js, onload ) {
   var head, ref;
   head = document.getElementsByTagName('head')[0];
   if (!head) { return; }
   script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = js;
   script.addEventListener( "load", onload, false );
   head.appendChild(script);
}

これが将来誰かに役立つことを願っています。

于 2009-03-02T10:18:57.787 に答える
3

スクリプトを使用する前に両方のスクリプトが確実にロードされるようにする方法はありますか?

はい。

最後にロードするコード (自分のapplication.jsもの) をプロトタイプのdocument.observeに入れます。これにより、プロトタイプとその他のものが完成して準備が整った後にのみコードがロードされるようになります。(jQuery に精通している場合、この関数は jQuery の に似ています$(document).ready)

于 2008-08-20T23:15:32.230 に答える
2

AMQ は、FireFox のエラー コンソールにオブジェクトが定義されていないと表示されるプロトタイプに依存します。

AMQ はPrototype ライブラリに依存しているということですか? あなたが提供したコードにそのライブラリのインポートが表示されません。

于 2008-08-21T03:09:52.357 に答える
2

AMQ は Prototype ライブラリに依存しているということですか? あなたが提供したコードにそのライブラリのインポートが表示されません。

はい、ActiveMQ の javascript (amq.js) は Prototype に依存します。amq.js では、_amq.js、behaviour.js、prototype.js の 3 つのスクリプトをロードします。

JavaScript の読み込み順序 wrumsby についてご協力いただきありがとうございます。これは、私のバグが別の城にあることを示しています:(

私は別の問題を抱えていると思います。また、ActiveMQ 5.0 から 5.1 までの js ファイルを確認したところ、それらも同じであることがわかりました。5.0 から 5.1 で何かが変更されたため、トピックをサブスクライブするには更新が必要です。探し続けますが、この考えられる原因を取り除いてくれてありがとう。

于 2008-08-21T16:54:08.880 に答える
0

組み込みの SharePoint JavaScript メソッドを使用して、スクリプトの実行を制御することもできます。

_spBodyOnLoadFunctionNames.push("yourFunction");
于 2012-08-01T14:31:05.807 に答える