1

多くのサイトに埋め込むことができる調査への招待を開発しています。招待状を提示するために、半透明のオーバーレイ上にアニメーション化されたモーダル ボックスを表示する JavaScript ライブラリであるModalboxを使用しています。

この Modalbox ライブラリは、Prototype および script.aculo.us/effects ライブラリに依存しています。招待状は、私が所有していないサイトに動的に埋め込まれ、マークアップを静的に変更することはできません。

ロード時に、Prototype が次のようにロードされているかどうかを (JS で) チェックします。

if (typeof Prototype == "undefined") {
    document.write('<script type="text/javascript" src="http://mysite.com/lib/prototype.js"><\/script>');
}

if (typeof Effect == "undefined") {
    document.write('<script type="text/javascript" src="http://mysite.com/lib/scriptaculous.js?load=effects"><\/script>');
}

通常、Prototype.js も script.aculo.us も読み込まないため、ほとんどのサイトですべてうまく機能します。それらをロードするサイトがいくつかありますが、それらをロードする必要はなく、再び機能します。

ただし... 1.4.0 / 1.5.1 などの古いバージョン (Modalbox には Prototype 1.6.0 と script.aculo.us 1.8.0 が必要) が既に読み込まれているサイトがあります。

Javascript でプロトタイプや script.aculo.us を動的にアンロード/置換するにはどうすればよいですか? 出来ますか?

4

3 に答える 3

2

これは技術的には可能かもしれませんが、プラグインが機能するように、ページの残りの部分を壊す危険を冒すつもりはありますか? 新しいバージョンでは動作しない他のプラグインとの互換性など、これらのサイトがアップグレードされていないのには十分な理由がある可能性があります。コードを使用するサイトに Prototype の最小バージョン (Prototype.Version を調べて) を要求するか、見つからない場合はそのまま含めることをお勧めします。Scriptaculous で同じことを行います。

これにより、コードのユーザーは最善の方法を決定できます。彼らは自分のページをアップグレードするか (慣性により古いバージョンが使用されている可能性が高いため)、プラグインをドロップすることができます。

于 2009-06-11T12:35:30.647 に答える
2

tvanfosson への回答として、必要なプロトタイプに動的に更新する方法を理解できれば、WTFFrameworkのようなものを利用して元のバージョンを判別できるはずです。次に、ポップアップを表示する前にプロトタイプをロードし、ポップアップが閉じられたら元のプロトタイプをリロードします。

于 2009-06-11T12:43:56.147 に答える
1

私の同僚の何人かは、私の (1.6.0) プロトタイプの関数に "__mySite" というプレフィックスを付けることで、関数の "名前空間" を提案しました。ただし、名前が変更された関数への呼び出しも更新する必要があるため、多くのリファクタリング作業が必要になります。

于 2009-06-11T13:07:30.693 に答える