在 Firefox 上,window.open(url) 和 window.location.href = url 有什

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

本文关键字:window url location href 有什 Firefox open      更新时间:2023-09-26

我正在尝试构建一个书签,将当前网址作为参数提供给另一个网址。

但是我发现这

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改变位置之外,为什么后者有效,而前者只是打开另一个窗口到原始位置?

这是在火狐上。有趣的是,在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 的浏览器窗口中。

如果要创建书市脚本,则使用 window.location 是获取当前窗口的 url 并将其分配给程序的 url 字符串的更好方法。

您可能会发现在不同的浏览器中出现意外行为的原因是,没有为窗口对象设置官方的公共标准,因此每个浏览器选择在幕后实现它的方式可能会有所不同。