[英]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
謝謝
有什么方法可以知道我從哪個服務器/主機加載?
是的, 除非使用defer
或async
屬性異步加載腳本,否則可能是這樣,因為在這種情況下,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.hostname
或document.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.