簡體   English   中英

Firefox上的window.open(url)和window.location.href = url有什么區別?

[英]What's the difference between window.open(url) and window.location.href = url on Firefox?

我正在嘗試構建一個bookmarklet,將當前url作為參數提供給另一個url。

但是我發現了這一點

javascript:(function(){window.open("http://www.somesi.te/some/thing?url="+encodeURIComponent(window.location.href))})()

這不起作用

javascript:(function(){window.location.href = "http://www.somesi.te/some/thing?url="+encodeURIComponent(window.location.href)})()

確實。 除了window.open打開另一個窗口和window.location.href更改位置的明顯區別之外,后者為什么會工作,而前者只是打開另一個窗口到原始位置?

這是在Firefox上。 有趣的是,在Chrome上工作正常。

這是安全的事嗎?

window.open()window.location.href之間的區別在於open()是窗口類的方法window.location是窗口類的屬性

1. window.open()是窗口類的一個方法

調用window.open()方法實際上會創建一個窗口對象,該窗口對象可以保存在變量中並根據程序的要求進行操作。

要演示window.open()實際返回一個窗口對象,請考慮以下代碼:

var mywindow = window.open("http://google.com");
mywindow.name = "Awesome Window";
console.log(typeof(mywindow)); // --> "object"
console.log(mywindow.name); // --> "Awesome Window"

你的代碼打開一個不需要的窗口的原因是因為你正在調用window.open() ,它的唯一目的就是打開一個新窗口。

2. window.location是窗口類的只讀屬性

雖然window.location是一個只讀屬性,但window.location有一個內置的快捷方式功能,允許window.location可分配,這與調用window.location.assign()具有相同的效果,但不返回一個窗口對象,但使用根窗口對象分配一個新的URL,導致新分配的URL被加載到瀏覽器窗口中,在該窗口中調用了分配位置的javascript。

如果您正在創建bookmarket腳本,那么使用window.location是獲取當前窗口的url並將其分配給程序的url字符串的更好方法。

您可能會發現在不同瀏覽器中遇到意外行為的原因是窗口對象沒有正式的公共標准集,因此每個瀏覽器選擇在幕后實現它的方式可能會有所不同。

暫無
暫無

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

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