比如谷歌不显示状态栏(仅在鼠标移动到a标签上才显示);IE中也不起作用

时间:2022-03-17 07:30:43

控制台中会输出"http://www.mamicode.com/https:/www.baidu.com",并不包罗盘问字符串,好比浏览器地点栏输入https://www.baidu.com/?nDos=great。打开百度首页之后,使用window.origin也不会输出此中的?nDos=great。

1.2 name

name 属性可设置或返回存放窗口的名称的一个字符串。

该名称是在 window.open() 要领创建窗口时指定的或者使用一个 <frame> 符号的 name 属性指定的。窗口的名称可以用作一个 <a> 或者 <form> 符号的 target 属性的值。以这种方法使用 target 属性声明了超链接文档或表单提交功效应该显示于指定的窗口或框架中。

对付内联iframe,如一个页面里面有很多iframe,就可以用:window.name(当前window的名称)、window.parent.name(父window的名称)、widnow.top.name(顶层window的名称)。

1.3 name跨域

window的name属性有一个特征:即在一个窗口的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每一个页面对window.name都有读写的权限,window.name是长期的存在于一个窗口载入的所有页面中的,并不会因为新的页面的载入而被重置。

请看下面两个html文件构成的例子:

a.html:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>a.html</title> </head> <body> <script> window.name = ‘这是a.html设置的window.name值‘; /*2秒后在本页面打开b.html*/ setTimeout(function(){ window.location = ‘b.html‘; }, 2000); </script> </body> </html>

b.html:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>b.html</title> </head> <body> <script> document.write(window.name); </script> </body> </html>

在浏览器中打开a.html,2秒之后会跳转到b.html,并在页面中写入“这是a.html设置的window.name值”。我们可以看到b.html页面上告成输出了a.html页面中设置的window.name的值,如果在之后所有载入的页面都没对window.name进行改削的话,那么所有的这些页面获取到的window.name的值都是a.html页面中设置的阿谁值;

不过要注意的是:window.name的值只能是字符串的形式,这个字符串的巨细最大只能允许2M摆布,具体取决于差此外浏览器,但是一般是够用了。

上面的例子中,我们用到的页面a.html和b.html是处于同一个域的,但是即使a.html与b.html处于差此外域中,上述结论同样是适用的,这也正是操作window.name进行跨域的道理;

好比上面的例子,我们把window.location = ‘b.html‘中的跳转页面改为,然后打开控制台输出window.name看看是什么数据。

固然这种跳转的方法来跨域显然不能实际应用,好比我们的页面是,而想要获取的数据在方针页面中。这个时候我们需要一其中间角色iframe,通过它来获得data.html中的数据。具体要领如下。

以下为改削后的a.html文件代码:

<body> <iframe src="http://www.cnblogs.com/data.html" onload = "getData()"> <script> function getData(){ var iframe = document.getElementById(‘proxy); iframe.onload = function(){ var data = iframe.contentWindow.name; //上述即为获取iframe里的window.name也就是data.html页面中所设置的数据; }; iframe.src = ‘b.html‘; } </script> </body>

上述代码首先设置了一个iframe标签,将src设置为跨域网页的地点,加载告成后将执行绑定在onload事件上的代码,也就是getData()。该函数中在iframe上重置了onload事件绑定的函数,此中代码可以获取iframe中window东西的name属性值,最后最关键的一步是将iframe的src属性值设置为b.html,也就是与a.html同源的页面地点。

如果没有这最后最关键的一步,那么将获取不到iframe.contentWindow.name的值。这收到浏览器的同源计谋所限制,但是最后一步使得iframe中的页面与a.html是同源的,同时iframe中的页面跳转也没有转变window.name的值,最终我们获得的还是中的值。

1.4 status

相关联的还有defaultStatus和defaultstatus属性,小我私家还不知道这几个属性有什么用,在试验中也发明不起感化。好比谷歌不显示状态栏(仅在鼠标移动到a标签上才显示);IE中也不起感化,,应该是IE设置的原因,具体没有深入配置。

有兴趣的读者可自行调试。