2010-08-16 109 views
16

我想根據當前主機名設置頁面的基本href屬性。我已經生成了可以在不同主機名上查看的HTML頁面,這意味着生成一個基本href標籤將在一個主機名中工作,但在另一個主機名中將不正確。如何在Javascript中設置頁面的基礎href?

+0

我通常有一個常量JS文件,我將其設置爲'$ .serverRoot'作爲主機的相對根目錄(例如'$ .serverRoot ='/ myapp /';' – 2010-08-16 16:03:00

+0

這適用於AJAX請求,但是如果我要調整所有的圖像路徑並鏈接hrefs來解釋一個Javascript變量,我必須做大量的工作。使用基礎href標籤解決了我遇到的很多問題同一個HTML文件可以通過不同的主機名訪問,但是它引入了一個主機名上的路徑不正確的問題 – 2010-08-16 16:07:15

回答

30

這樣做的正確的方法是做標記的基於切斷電流主機名到document.write:

正確:

<script type="text/javascript"> 
document.write("<base href='http://" + document.location.host + "' />"); 
</script> 

這種方法產生了在IE中正確的結果, FF,Chrome和Safari。它產生一個(正確的)不同的結果dowing以下:

不正確:

<script type="text/javascript"> 
var newBase = document.createElement("base"); 
newBase.setAttribute("href", document.location.hostname); 
document.getElementsByTagName("head")[0].appendChild(newBase); 
</script> 
+0

我在使用這種方法時遇到了谷歌爬蟲的一些麻煩,我沒有在'和/>之間放一個空格,抓取工具將我的基礎href解釋爲document.location.hostname'/>。這可能是此解決方案的一個問題。有關詳細信息,請參閱:http://www.google.com/support/forum/p/Webmasters/線程?TID = 2cff8eadfdf3a393&hl = en&fid = 2cff8eadfdf3a393000498a325f9c75d – 2010-12-30 18:22:58

+3

沒有理由說明爲什麼'document.write'會是「正確的」,並且在文檔樹中正確插入節點會是「不正確的」。這個問題屬於「解決錯誤問題」的範疇,但這裏描述爲「正確」的方法通常會在錯誤的地方插入一個「基本」標籤。如果代碼位於'head'部分,那麼這是無用的(爲什麼不把正確的'base'標籤作爲普通的HTML?),並且如果它在其他地方執行,通常會將'base'插入到'body'中。 – 2013-06-02 18:19:27

+1

我很好奇爲什麼「不正確」的方法是不正確的。 – 2014-12-18 14:35:46

2
文件撰寫( 「」);

<script> 
 
document.write("<base href='"+ window.location.protocol +'//' + window.location.host + "' >"); 
 
</script>

0

我想你最好做這種方式

<script type="text/javascript"> 
     document.head.innerHTML = document.head.innerHTML + "<base href='" + document.location.href + "' />"; 
    </script> 

由於location.hostname不返回應用程序上下文根!您還可以在控制檯console.log上登錄document.location以查看document.location上的所有可用元數據。

相關問題