0

現在の開発/テスト サーバーに一致するようにリンクのホストを変更する Javascript があります。

次に例を示します。

var ndomain = document.domain;
var mydomain = 'www.foo.com';
var alink = document.getElementsByTagName('a');
for (var i = 0; i < alink.length; i++) {
    if (alink[i].href.length > 0){
        if (alink[i].host.substr(0, mydomain.length) == mydomain){
            alink[i].host = ndomain;
        }
    }
}

これにより、http://www.foo.com/page.htmlへの参照がhttp://level1.test.foo.com/page.htmlに変更されます。

これは、Safari (Mac または Win) を除く、私がテストしたすべてのブラウザーで機能します。私が思いついた最も近い理由は、「同一生成元ポリシー」です。

同一生成元ポリシーに関する私の理解に基づくと、すべてがfoo.comドメインの下にあるため、これは機能するはずです。2 レベルのサブドメイン (例: level1.test ) に移動するという事実で、Safari はより厳密になる可能性がありますか?

このプロセスが Safari で機能しない理由、または Safari で機能させる方法について誰かがアドバイスできますか?

ティア!

4

2 に答える 2

0

5 行目に構文エラーがあります (3 つの開き括弧、2 つの閉じ括弧のみ)。

于 2008-12-03T22:19:38.600 に答える
0

これは、同一オリジン ポリシーとは関係ありません。

同じことが Google Chrome でも見られます。どちらも WebKit を使用しているため、おそらく WebKit DOM インターフェイスが問題の鍵となります。

問題の JS を Chrome で実行しても、リンクのホストは変更されません。JS デバッガーも JS コンソールも問題を報告しません。

anchor.host プロパティを変更しようとすると、次のようになります。

  • エラーは報告されません
  • anchor.host プロパティに変更はありません

これは、anchor.host プロパティが何らかの理由で読み取り専用であることを示しています。

anchor.href プロパティは書き込み可能であるように見えるので、おそらくこれが最良の選択肢です。次のコード機能します。

var ndomain = document.domain;
var mydomain = 'www.foo.com';
var alink = document.getElementsByTagName('a');
for (var i = 0; i < alink.length; i++) {
    if (alink[i].href.length > 0){
        if (alink[i].host.substr(0, mydomain.length) == mydomain){
            var currentHref = alink[i].getAttribute('href');
            var newHref = '';

            // Generate newHref based on currentHref and setting host as required

            alink[i].setAttribute('href', newHref);
        }
    }
}
于 2008-12-11T15:22:35.660 に答える