fancyboxプラグインなどのjavascriptext-libがページにすでに存在するかどうかを確認できますか(バージョンは関係ありません)?私はliferayポートレットを使用していますが、1つのページに2つの同じポートレットを配置できますが、すでにスクリプトの競合が発生しています。(レイアウト構成パネルのLiferay AUIスクリプト、一部のassetPublisherのスライダー...)
2 に答える
ネイティブのjavascript関数(つまり、組み込みまたはjavascriptを使用して作成されたもの)をテストしている場合は、次のようにします。
if (typeof foo == 'function')
使用しているライブラリに関係なく、常に機能します。たとえば、jQueryが利用可能かどうかをテストします。
if (typeof jQuery == 'function')
ホストオブジェクトのjQueryisFunctionメソッドは信頼できません。ホストオブジェクトをテストしていない場合、typeofは完全に信頼できます。
編集
ああ、ホストオブジェクトのメソッドをテストしている場合、考慮すべき多くの側面があることを付け加えておきます。ほとんどの場合、以下で十分です。
if (hostObject && hostObject.method) {
// call hostObject.method
}
ホストオブジェクトはECMA-262に準拠する必要がないことに注意してください(ただし、最新の実装のほとんどは、少なくともDOMオブジェクトに対しては大部分が準拠しています)。使用中の実装には、「不明」などを返すホストオブジェクトがあり、typeof
古いものではエラーが発生するものもあります。
一部のホストオブジェクトはobject.prototype.toString.call(hostObject)
(jQueryのisFunction関数が使用する)でテストするとエラーをスローするため、堅牢なisHostMethod関数を実装する場合を除いて、ほとんどの場合、上記で問題が発生します。
汎用JSライブラリがロードされているかどうかを確認するには(jQueryプラグインではない)、その関数の1つをテストします。
if ($.isFunction(pluginFunction)) {
// Code to run if generic library is loaded
}
jQueryプラグインがロードされているかどうかを確認するには:
if (jQuery().pluginName) {
// Code to run if plugin is loaded
}
お役に立てれば!