そうです、これは BASE メタ タグです。これは、最新バージョンの jQuery UI (1.9) で直面する問題であり、1.8 で機能しました。Tabs API には多くの変更が加えられましたが、jQuery ソース コードを確認するまで、この問題の原因は何もないように見えました。
- BASE メタ タグは、(タブ コンテンツの参照として使用する) タブの href 属性を hash+id から完全な URL (BASE タグ値を使用) に変換するようブラウザに指示します。それが期待される動作です。
- 以前のバージョンのタブ UI では、href が本当にリモートかどうかを推測するのが難しく、href タブの値を分割し、それを現在の URLおよびBASE タグと比較して、実際にローカルかどうかを判断していました。
- jQuery の最新バージョンは BASE タグの値をチェックしません。
- そのため、最新バージョンを BASE メタ タグで使用すると、Ajax を使用してタブ コンテンツを読み込もうとし、それ自体 (または BASE URL にあるもの) をリロードします。
これは、バージョン 1.8.24 で使用された jQuery UI タブです。
this.anchors.each(function( i, a ) {
var href = $( a ).attr( "href" );
// For dynamically created HTML that contains a hash as href IE < 8 expands
// such href to the full page url with hash and then misinterprets tab as ajax.
// Same consideration applies for an added tab with a fragment identifier
// since a[href=#fragment-identifier] does unexpectedly not match.
// Thus normalize href attribute...
var hrefBase = href.split( "#" )[ 0 ],
baseEl;
if ( hrefBase && ( hrefBase === location.toString().split( "#" )[ 0 ] ||
( baseEl = $( "base" )[ 0 ]) && hrefBase === baseEl.href ) ) {
href = a.hash;
a.href = href;
}
これは、バージョン 1.9.2 で jQuery UI Tabs が使用するものです。
function isLocal( anchor ) {
return anchor.hash.length > 1 &&
anchor.href.replace( rhash, "" ) ===
location.href.replace( rhash, "" )
// support: Safari 5.1
// Safari 5.1 doesn't encode spaces in window.location
// but it does encode spaces from anchors (#8777)
.replace( /\s/g, "%20" );
}
Tabs コードが大幅に書き直されたため、コードの編成は異なりますが、その考えは理解できます ( $( "base" )[ 0 ]は BASE メタ タグの値です)。
これまでのところ、通常のタブ API を使用して「これはローカルです。Ajax を使用しないでください」とタブに伝える方法は見つかりませんでした。私があなたに提供できるのは、その間にそれをすばやく修正するために私がしたことです(私が尋ねている間、再確認し、おそらくバグレポートに記入してください):ハック。
function isLocal( anchor ) {
return anchor.hash.length > 1 &&
( (anchor.href.replace( rhash, "" ) === location.href.replace( rhash, "" ).replace( /\s/g, "%20" )) ||
(anchor.href.replace( rhash, "" ) === $( "base" )[ 0 ].href));
}
これは、新しいバージョンに加えて、以前のバージョンで行われたチェックです。
最新の jQuery UI の縮小されていないコピーで、 isLocal 関数をそれに置き換えます。次に、ファイルを縮小します。元のバージョンを置き換えます。テスト。
Firefox(17.0.1)とChromium(18.0.1025.168)でうまくいきました。
欠点は、(CDN からの) サードパーティのコピーを使用できないことです。私のアプリケーションのほとんどはイントラネットで使用されているので、私にとっては問題ではありません。
誰かがより良い解決策を見つけた場合、または jQuery UI コードをハッキングせずにそれを行う方法を知っている場合は、お知らせください。
更新: このバグ レポートを見つけました (重複がいくつかあります) : http://bugs.jqueryui.com/ticket/7822問題は別のところにあります。バグトラッカーからの引用:
これがどのように修正するのが重要なのかわかりません...
簡単で動的な PHP の実装を次に示します: 'http://' 。$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . 「#フー」。
JavaScript でこれを修正するのもかなり簡単ですが、サンプル コードは提供しません。なぜなら、それはこれを修正するのに不適切な場所であり、非常に落胆させるべきだからです。リンクの動作は明確に定義されており、すべてのブラウザーで一貫しています。間違った URL を使用して、JavaScript でハッキングする必要があるという理由はまったくありません。
最後に、これを「修正」することは、適切に使用するすべての人にとって正しい動作を壊すことを意味することに注意することが重要です。適切な URL を持つ人々が古いコードに存在する実際のバグに遭遇したため、これは修正されたことを覚えておいてください。