0

fancyboxプラグインなどのjavascriptext-libがページにすでに存在するかどうかを確認できますか(バージョンは関係ありません)?私はliferayポートレットを使用していますが、1つのページに2つの同じポートレットを配置できますが、すでにスクリプトの競合が発生しています。(レイアウト構成パネルのLiferay AUIスクリプト、一部のassetPublisherのスライダー...)

4

2 に答える 2

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関数を実装する場合を除いて、ほとんどの場合、上記で問題が発生します。

于 2012-08-31T02:02:14.653 に答える
1

汎用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
}

お役に立てれば!

于 2012-08-31T01:26:47.867 に答える