2012-01-21 2 views
0

HTML文書内の静的スクリプトタグにonloadイベントを関連付けるブラウザ間の方法はありますか?静的スクリプトタグ内のクロスブラウザonloadイベント

以下は、IE 7とIE 8では動作しません:私は、動的スクリプトタグでとif文これを達成する方法を発見した

<script onload="DoThat" type="text/javascript" src="..."></script> 

いくつかの背景。例えば、this MSDN articleで説明されています。

私の問題は、現在のスクリプトタグを見つける必要があるということです。なぜなら、DOM要素をインプレースに挿入するウィジェットを構築しているからです。過去にはI have found some workarounds to do thisでしたが、それらのすべてには欠点があります。私はスクリプトのonloadイベントで "this"キーワードを使用すると助けになると期待しています。

+0

この例を試すことができますか? – dfsq

+0

そうですね、私は質問にいくつかの文脈を追加しました。もし私が "this"を現在のスクリプトを指し示すことができれば、私はうれしいでしょう。このリンクからわかるように、私はすでにいくつかの選択肢を検討してきました。 – Christophe

答えて

3

私が理解する限り、どのスクリプト要素が属するのかを知るにはコードが必要です。このスクリプトの横に必要なHTMLウィジェットコンテンツを挿入するか、スクリプトの親に追加するなどします。そうであれば、別のアプローチを提案します。

var scripts = document.getElementsByTagName('script'), 
    thisScript = scripts[scripts.length - 1]; 

thisScriptはあなたがに位置、現在のスクリプト要素、このコードを探しているDOM要素です:

は、あなたは、コードの次の行を配置するJavaScriptファイルウィジェット内部。とても簡単。

なぜ動作するのですか? 詳細説明http://feather.elektrum.org/book/src.html。概要:

srcを含むスクリプトがページに読み込まれると、残りのページはまだ書き込まれません。しかし、これほど多くの人々がこの可能性について知っているが、暗に ページが含まれているどのように多くのスクリプトに関係なく、現在実行し始めて1が最後のものであることを

ある

これは、非常に単純かつ効果的な技術です。これは信頼性が高く、100%ブラウザ互換です。ところで、Googleはこのコードを使用して+1ボタンをレンダリングします:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js"> 
    {lang: 'dk'} 
</script> 

これで、apiスクリプトがこのハッシュパラメータをどのように取得できるのでしょうか?私の例ではthisScript.innerHTML

+0

私の質問でリンクをたどると、これが代替手段の1つとして表示されます。 「srcを持つスクリプトがページにロードされると、残りのページはまだ書き込まれていません」というアサーションは、遅延スクリプトまたは非同期スクリプトでは間違っています。 – Christophe

+1

はい、遅延ロードがある場合は、これは適切ではありません。とにかく、それはIE7のための素晴らしい選択肢です。 – dfsq

0

私はあなたのニーズを捕まえたかどうかはわかりません。
とにかく現在のスクリプトを見つけるために、あなたはあなたがonload`は、現在のスクリプト要素を参照するために `this`を使用できるように`が必要

<script src="jquery-1.7.1.min.js" varTest="valueTest" id="myID"></script> 
<script> 

var scripts = document.getElementsByTagName('script');  
var pattern = 'jquery-1.7.1.min.js'; 
var i = undefined; 

for (var x=0; x<scripts.length; x++) 
{ 
    if (scripts[x].src.match(pattern)) { i = x; break; } 
} 

if (typeof(i) != 'undefined') 
{ 
    // Do any association needed here 
    var current_script = scripts[i]; 
    // Just for test    
    console.log(current_script.attributes); 
} 

</script> 
+0

この回答は完璧です。しかし、私のケースでは、私が言及したように、私はウィジェットアプローチを持っており、ユーザーは同じウィジェットを複数回挿入することを選択できます。複数のスクリプトは、同じ "パターン"を持つことになります。 – Christophe

関連する問題