現在のホスト名に基づいて、JavaScriptでページのベースhref属性を設定したい。別のホスト名で表示できるHTMLページを生成しました。つまり、ベースhrefタグの生成は1つのホスト名では機能しますが、別のホスト名では正しくありません。
これを行う正しい方法は、現在のホスト名に基づいてタグのdocument.writeを実行することです。
正しい:
<script type="text/javascript">
document.write("<base href='http://" + document.location.Host + "' />");
</script>
この方法により、IE、FF、Chrome、Safariで正しい結果が得られました。これは、以下を実行する場合と(正しい)異なる結果を生成します。
不正解:
<script type="text/javascript">
var newBase = document.createElement("base");
newBase.setAttribute("href", document.location.hostname);
document.getElementsByTagName("head")[0].appendChild(newBase);
</script>
このようにした方がいいと思います
<script type="text/javascript">
document.head.innerHTML = document.head.innerHTML + "<base href='" + document.location.href + "' />";
</script>
なので location.hostname
はアプリケーションコンテキストルートを返しません! document.location
コンソール上console.log
で利用可能なすべてのメタデータを表示するにはdocument.location
。
<script>
document.write("<base href='"+ window.location.protocol +'//' + window.location.Host + "' >");
</script>
私は上の答えに同意しなければなりません。 「正しくない」ソリューションが間違っている唯一の理由は、プロトコルが考慮されていないために失敗することです。
プロトコル/ホスト/ポートを説明する必要がある実用的なソリューションは次のとおりです
var base = document.createElement('base');
base.href = window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : '');
document.getElementsByTagName('head')[0].appendChild(base);
これは現在、IE11を含むすべての主要なブラウザーで正常に動作します
私はこれを使用して、誰かが興味を持っている場合は、このベースのhrefの末尾にサフィックスを追加することもサポートするnpmパッケージを作成しました