簡體   English   中英

在Javascript中以任何方式知道從哪個主機腳本加載?

[英]In Javascript any way to know what host script was loaded from?

在javascript中,作為從somer主機加載的腳本,有什么方法可以知道我從哪個服務器/主機加載? 我需要向該主機發送額外的ajax請求,並且更願意動態地找出主機。

因此,如果您在頁面上包含javascript文件

<script src="http://somehost.com/js/test.js"></script>

當javascript執行時,在test.js中......

var host_loaded_from = ??? // should be somehost.com 

謝謝

有什么方法可以知道從哪個服務器/主機加載?

是的, 除非使用deferasync屬性異步加載腳本,否則可能是這樣,因為在這種情況下,DOM中的最后一個腳本可能不一定是當前正在執行的腳本。 有關更多信息,請參閱@kangax的評論。

此外,最近發布了同樣的問題

在test.js中,獲取最后一個腳本元素,該元素將是當前正在解析的腳本(在您的情況下為test.js),並獲取其src

// test.js
var scripts = document.getElementsByTagName('script');
var src = scripts[scripts.length - 1].src;

找到一個src ,使用正則表達式解析主機。

src.match(new RegExp('https?://[^/]*'))
["http://somehost.com"] // for your example

不,謝謝。

如果<script>有一個id,那么也許吧。 但你不能真正依賴它。

不確定是否可以使用JavaScript完成。 如果腳本在PHP文件中,請執行以下操作:

...
var host_loaded_from = <?php echo $_SERVER[SERVER_NAME] ?>
...

在我的網站上,我出於這個原因使用PHP包含我的JS腳本。 我很想知道是否有更好的方法。

由於同源策略,您只能向源(主機+協議+端口)發出AJAX請求,從中加載HTML頁面(文檔) - 這不一定與加載js的源相同。

您可以使用window.location.hostnamedocument.location.hostname來查找document.location.hostname的主機名。

腳本是否知道自己的文件名? (OP問題中的“test.js”。)

如果是這樣,您的腳本可以查詢所有腳本標記的dom,查找具有src屬性的腳本標記。 但是您需要注意兩個腳本,這些腳本具有從不同服務器加載的相同文件名。 例如

<script src="http://somehost.com/js/test.js"></script>
<script src="http://somehost_number2.com/js/test.js"></script>

這是JS在el中查找所有腳本標記:

var scripts = el.getElementsByTagName('SCRIPT');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM