0

これを試してください:あなたのウェブサイトにフォルダtestを作成し、その中にこのhtmlファイル(test.html)を入れてください:

<html><head>
<base href="http://www.site.com/" />
</head><body>
<span onclick="window.location.href='test/test.html?done!';return false;">click me</span>
</body></html>

お気に入りのブラウザでリンクをクリックします。URLは何ですか?

IEのリンクをクリックします。URLは何ですか?

編集:IEは次の場所に移動します:http ://www.site.com/test/test/test.html?done !

これを修正する方法はありますか?それは、(1)ベースタグを削除すること、(2)onclickを変更して、適切なベースを追加する関数を使用することではありませんか?IEでwindow.location.href関数をオーバーライドする方法はありますか?

4

2 に答える 2

1

これは明らかにIE11の問題です。私はちょうど今それに遭遇しました。私がやったことはこれです:

onclick="window.location=document.getElementsByTagName('base')[0].href+'your_url_destination';"

onclick行を変更する必要がありますが、別の関数は必要ありません。それはすべてのブラウザで動作するはずであり、これまでのところ私にとっては機能しています。

于 2014-09-01T01:56:40.617 に答える
0

(最終相対パスtest.htm:)というサブディレクトリに移動した後、バグを確認できます(最初はあなたが何を求めているのか誤解していました)。グーグルすると、それがバグであるか、少なくともタグの非標準実装であることが確認されます(これは、仕様に従って実装に従わないMicrosoftのさらに別のケースである可能性があります)。testtest/test.htm<base>

IEは<base>、定義されたアンカーのタグを尊重します。

<a href="test/test.html">Click me</span>

http://www.site.com/test/test.html(タグが閉じられてい<base>ないか、古いバージョンのIEの場合は自己閉じられていない場合)に移動しますが、IE(すべてのバージョン)は、JavaScriptではなく、アンカーのベースタグのみを尊重します。

IEtest/がURLに追加を追加する理由は、実際には標準に準拠した動作です。<base>IEはタグを無視しているため、のリンクは、現在のディレクトリ()に関連するファイルでtest/test.html呼び出されるサブディレクトリがあり、IEが正しく `test / test /test.html'に移動することを示します。testtest.htmltest

それを修正する方法に関しては...

  1. タグを削除しても<base>効果はありません。
  2. onclickを正しいベースURLを返す関数に変更すると機能しますが、これは受け入れられないと述べています。
  3. window.location.hrefは文字列であり、関数ではないため、「オーバーライド」は非スターターです。
  4. onclick絶対URLを使用するように変更することもできます。
  5. すべての埋め込み属性を削除し、JavaScript(または)onclickを介してそれらを割り当てると、長期的にはより効果的であり(コンテンツ/動作の分離)、正しいベースURL(およびおそらく選択する方法)を簡単に添付できるようになります。あなたの特定の状況を知っています)。attachEventaddEventListener
  6. jQuery / Dojo / PrototypeなどのDOM操作ライブラリを使用して、任意のonclick属性をループし、URLを絶対URLに更新できます。
于 2012-10-20T20:28:15.937 に答える