我正在尝试构建一个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上工作正常。
这是安全的事吗?
答案 0 :(得分:7)
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
可分配,这与调用{{1}具有相同的效果不返回窗口对象,但使用根窗口对象分配新的URL,导致新分配的URL被加载到调用分配位置的javascript的浏览器窗口中。
如果您要创建图书市场脚本,那么使用window.location.assign()
是获取当前窗口网址并将其分配给您的程序的网址字符串的更好方法。
您可能会发现在不同浏览器中遇到意外行为的原因是窗口对象没有正式的公共标准集,因此每个浏览器选择在幕后实现它的方式可能会有所不同。