1

サイトにデータを表示するサードパーティのスクリプトがあります。スクリプトが読み込まれると、スクリプトが含まれるページのすべての JS が壊れます。スクリプトを削除すると、ページは問題なく動作します。

サードパーティのスクリプトがページを壊すような方法でページとやり取りするのを防ぐ方法はありますか?

ノート:

  • 編集するサードパーティのスクリプトにアクセスできません。
  • 壊れているスクリプトに jQuery を使用しています。私はjQuery.noConflictまだページを壊しています。
  • 違いが生じるかどうかを確認するために、iframe にスクリプトを読み込もうとしました。それはしませんでした。
  • スクリプトは、主に CSS と HTML のデータをページに書き込みます。

注: 以下のコードには、薬物コンテンツ (主にマリファナ) への参照/リンクが含まれている場合があります。

医療用マリファナの薬局のサイトを構築しています。WeedMapsというサイトから薬局のメニューをインポートしています。埋め込みコードは次のようになります。

<script type="text/javascript">var wmenu_id = 1111;</script> //The number correlates to the menu I need to pull, I have changed it in this question
<script type="text/javascript" src="http://legalmarijuanadispensary.com/components/com_weedmenu/weedmenu-widget.js"></script>

上記のコードを使用すると、サイトの JS が壊れます。私が制御できないサードパーティのスクリプトを使用しているときに、コードが壊れないようにする方法。

アップデート

ここにJS Fiddleがあります。メニューは開きますが、正しく閉じません。weedmaps からメニューを生成しているスクリプトを削除すると、メニューが正しく機能します。(weedmaps メニュー スクリプトは、HTML パネルの下部にあります。)

4

2 に答える 2

1

うーん、あまり運がありません。あなたからさらにアイデアが生まれるかもしれないので、私が持っているものを追加します。しかし、要するに、彼らのスクリプトは特にうまく書かれておらず、実際に修正する必要があると思います。

現状では、メニューをアニメーション化するときに Firefox で次のエラーが表示されます。

TypeError: jQuery.easing[jQuery.easing.def] は関数ではありません

このブログは、jQuery の前に Easing プラグインがロードされたときにこれが発生することを示唆しています。jQuery がロードされた後、WeedMenu スクリプトをロードする必要があるだけです。そこで、次のことを試しました(hereの助けを借りて):

$j.getScript('http://legalmarijuanadispensary.com/components/com_weedmenu/weedmenu-widget.js');

それは私にこのエラーを与えました:

非同期にロードされた外部スクリプトからの document.write() への呼び出しが無視されました。

を使用した WM スクリプトの結果として発生することが判明しましたがdocument.write、これは非常に古くなっています。そのため、このようなことを処理するための crapLoaderを見つけました。

crapLoader.loadScript("http://legalmarijuanadispensary.com/components/com_weedmenu/weedmenu-widget.js", "menu-script");

残念ながら、元のイージング エラーに戻ります。

これが私のフォークです - 何か見つけたら教えてください!

于 2013-01-23T00:34:04.603 に答える
1

スクリプトはうまく書かれていません。スクリプトからコード行を削除することで問題を解決できました。私が提供したリンクは、より長いスクリプトへのリストです。スクリプトには次のコード行がありました。

try {
    b("http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"), "function" != typeof wmenu_strains_callback && b("http://legalmarijuanadispensary.com/components/com_weedmenu/weedmenu.js", !0)
} 

削除するb("http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"),と、スクリプトが機能し、ページが機能します。何が起こっていたのかというと、スクリプトが jQuery を頭の片隅に挿入し、残りの JavaScript を壊していたのです。

于 2013-01-26T03:41:22.393 に答える