9

注: サード パーティから返された情報を追加して、これを編集しました。

簡単に言えば、私たちの内部広告サーバー メカニズムを呼び出す JS 広告タグを含めるタスクがあります。このメカニズムは、外部ファイルに document.writes するサード パーティのスクリプトを再試行します ... IE では機能しません。ネストされた document.writes は IE では機能しないと誰かが私に言いました。私はさまざまなことを試しました..appendTo / writeln /スクリプトタグの分割/スクリプトタグのデコードなど..何も機能していないようです。これは私にとってやや新しいので、おそらく私は明らかなことを見落としています。

これは次のようになります。

my html:
<script language="JavaScript" type="text/javascript">
   document.write('\x3Cscript type="text/javascript" src="_some_Path_to_internal_ad_server">\x3C/script>';);
</script>

この呼び出しは、最終的に次のようなコードをもたらします: ご覧のとおり、スクリプト タグを囲んでいません。

   tl1 = '989';
   tl2 = 'xnlll';
   document.write('<script type=\"text/javascript\" src=\"_some_Path_to_third_party.js\"><\/script>');

さて、その「_some_Path_to_third_party.js」は、document.writes と document.writeln を持ついくつかの js コードをもたらします。

私はこれを頭のてっぺんから書いているので、スクリプト タグがどのように分割されているか正確には覚えていませんが、それが問題だとは思いません。IE の入れ子になった document.writes だと思います。

さまざまなことを試し、最初のスクリプト呼び出しを自分のページに配置しました。document.writes はありません -- ただ

<script language="JavaScript" type="text/javascript" src="_some_Path_to_internal_ad_server">

サイコロはありません。

しかし、外部 js への直接呼び出しは機能しました (サードパーティ呼び出しを呼び出す内部広告サーバーへの呼び出しを削除しました)、ala:

<script language="JavaScript" type="text/javascript" src="_some_Path_to_internal_ad_server">

このようなことに対処した経験があり、それを克服する方法を知っている人はいますか?

4

1 に答える 1

6

あなたの問題に対する完全な回答を書くのに十分な詳細を投稿しなかったので (あなたは次のように書いています:「私はこれを頭のてっぺんから書いているので、スクリプトタグがどのように分割されているか正確には覚えていません」)、ここに直接的な解決策ではなく、開始するための一般的なヒントをいくつか紹介します。あなたは、問題は電話が多すぎることにあると確信しているdocument.writeので、可能な限り電話の数を最小限に抑えることに専念するとおっしゃいました。うまくいけば、最終的に問題を解決できるようになります。

余分なセミコロン

最初の例では、次のものがあります。

document.write(' ... ';);

余分なセミコロンを削除すると、次のようになります。

document.write(' ... ');

それはいくつかの問題を引き起こしている可能性がありますか?そうでない場合は、読み進めてください...

まず、いくつかの基本事項:

スクリプトの種類と言語

<script language="JavaScript" type="text/javascript">

"language" 属性は推奨されていないため、使用しないでください。「type」属性の問題は、text/javascript MIME タイプが廃止され ( RFC4329を参照)、application/javascript (正しいタイプ) が広くサポートされていないことです。実際には、すべてのブラウザは、「タイプ」がなければ単なる JavaScript であることを常に知っています。そのため、HTML5 のようにオプションであるすべてのマークアップ バージョンでは、それを除外することをお勧めします。(さらに、MIME タイプはサーバーによって指定されるべきものです。) 詳細については、この質問を参照してください。そうは言っても、<script>以下の例で使用します。

ドキュメント書き込みの最小化

これをHTMLに含める:

<script>
    document.write('\x3Cscript src="file.js">\x3C/script>');
</script>

以下とまったく同じです:

<script src="file.js"></script>

JavaScript などでスクリプト名を動的に作成する場合を除き、この場合に使用するのは非常に理にかなっていdocument.writeますが、その場合でもdocument.write.

スクリプトのパスがわからず、たとえばを使用している場合。という名前の JavaScript 変数を使用すると、次のpathように書きたくなるかもしれません。

<script>
    document.write('\x3Cscript src="' + path + '">\x3C/script>');
</script>

ただし、Google が Analytics に使用するものと同様のものを使用して、ほぼ同じ結果を得ることができます。

var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
var firstScript = document.getElementsByTagName('script')[0];
firstScript.parentNode.insertBefore(newScript, firstScript);

または短く、以下を使用appendChild:

var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
document.body.appendChild(newScript);

またはjQueryを使用すると簡単です:

$('<script />', {src: path}).appendTo('body');

pathスクリプトの URL です。または、DOM への挿入のためだけに部分的に jQuery を使用します。

var newScript = document.createElement('script');
newScript.src = path; // or newScript.src = 'file.js';
$('body').append(newScript);

jQuery.getScript を使用できる場合もあります。

$.getScript(path);

その他のアイデア

他のアイデアについては、次を参照してください。

これらは、 の使用を最小限に抑えるために実行できるいくつかの基本的なことですdocument.write。うまくいけば、これで始めることができます。

于 2012-09-23T01:57:01.270 に答える