1

次の HTML を検討してください。

<!DOCTYPE html>
<html>
<body>
Test page

<!--Start of Zopim Live Chat Script-->
<script type="text/javascript">
window.$zopim||(function(d,s){var z=$zopim=function(c){z._.push(c)},$=z.s=
d.createElement(s),e=d.getElementsByTagName(s)[0];z.set=function(o){z.set.
_.push(o)};z._=[];z.set._=[];$.async=!0;$.setAttribute('charset','utf-8');
$.src='//cdn.zopim.com/?pTR0FiicfJ4aMcmuHI9HfVAB4uzKeFIT';z.t=+new Date;$.
type='text/javascript';e.parentNode.insertBefore($,e)})(document,'script');
</script>
<!--End of Zopim Live Chat Script-->

<script type="text/javascript" async="">
window.addEventListener('load', function() {
    var b = document.getElementsByTagName("body")[0];
    var o = document.createElement("object");
    o.setAttribute("type", "application/x-shockwave-flash");
    var t = b.appendChild(o);
});
</script>
</body>
</html>

jsFiddle はこちら: http://jsfiddle.net/V9jtD/

これには、「オブジェクト」タグを DOM に追加するだけの別の非同期スクリプトである Zopim ウィジェット コードが含まれています。上記のファイルが Web サーバーによって提供されるようにします (jsFiddle を使用できます: http://fiddle.jshell.net/V9jtD/show/ )。Firebug を有効にして MacOSX Firefox 15 以降で開きます。

次のエラーが何度も繰り返されます。

TypeError: non-native scope object

エラーが表示されない場合は、ページを更新してください。そして、主に Zopim が表示されません (不完全な機能で表示されることがあります)。Firefox/Ubuntu ではこれを再現できませんでした。(確認できなかった Firefox/Windows で再現できる可能性があります)。

ただし、次の場合、Zopim は正常にロードされます。

  1. 「var t = b.appendChild(o);」をコメントアウトします。(つまり、「オブジェクト」タグを DOM に追加しないでください。または、2 番目のスクリプト タグを完全に削除することもできます)。
  2. Firebug を無効にします。

誰がエラーを引き起こしているのかを本質的に理解したいので、デバッグできます。

Zopim を非アクティブ化すると正常に動作するため、Firebug ですか? ただし、Firebug を有効にして 2 番目のスクリプト タグを削除しても、エラーは発生しません。

それを削除すると、Zopim は正常に動作するため、2 番目のスクリプト タグですか? ただし、Firebug を無効にすると、Zopim は 2 番目のスクリプト タグを使用しても正常に動作します。

それともZopimそのものですか?

2 番目の script タグのコンテンツは、swfobject.js の関数 testPlayerVersion() の一部であることに注意してください。既に swfobject があるページに Zopim を追加しようとすると、このエラーが発生しました。

4

1 に答える 1

0

フィドルがZopimから縮小されたJSをロードしていなかった場合は、おそらく解決するのが簡単ですが、問題のある行(大まかに美化されたもの)は次のとおりです。

try {
    (0)()
} catch (v) {
    s = v.arguments ?
        'chrome' : v.stack ?
        'firefox' : window.opera && !('stacktrace' in v) ?
        'opera' : 'other'
}

これは、ブラウザを検出するためのハッキーな方法のように見えます。なぜFirebugが保釈されるのかはわかりませんが、再現可能であれば問題を提起する価値があるかもしれません。

于 2012-12-22T22:45:18.143 に答える