gpt4 book ai didi

javascript - 使用 JavaScript,为什么看起来可以使用 window 对象在页面之间传递值?

转载 作者:行者123 更新时间:2023-11-27 23:27:15 25 4
gpt4 key购买 nike

我正在 HTML 页面上做一些实验,如果我这样做

name = "hmm";
console.log(name);

我将其加载到 Google Chrome 中,并显示 "hmm"自然。

问题是,如果我删除第一行或将其注释掉,然后重新加载页面,它将显示 "hmm"再次。如果我创建另一个网页index2.html并且也只做

console.log(name);

并将浏览器中的 URL 从 index.html 更改为至index2.html ,会显示 "hmm"再次。

所以我认为这是由于window.name具有这个值。但是,我从来不知道两个页面可以共享这样的值(value)观。我以为window对象应该重新开始并且不应该携带任何值...

这只发生在 name 上。 foo 不会发生这种情况,但我仍然认为name不应延续。

发生了什么事?那么跨网站(跨域?)这真的不应该发生,即使是同一个网站,不是吗?

最佳答案

I never knew two pages can share values like that.

是的。通常情况下,他们不会。发生这种情况只是因为您使用了特定的变量名称 name ,并在全局范围内使用它,其含义与 window 相同。同名属性。

window.name这是跨文档脚本早期的一个奇怪现象。作为一种设计,它在今天没有任何意义,但很难摆脱旧的网络行为。

当 Netscape 在 Navigator 2.0 中引入 JavaScript 和框架时,安全性并不是首要任务。网络是一个不同的、威胁较小的地方,出于商业原因,他们更关心在浏览器中添加任何和所有可能的功能,而不是设计一个连贯且安全的平台。

同源政策还处于起步阶段,并没有被视为重要的基本保障,更多的是在设计更好、更宽松的设计之前的一种不良阻碍。他们有一种列入黑名单的本能:添加功能并默认允许访问,除非它被证明是一个安全问题。

window.name弹出窗口上的属性反射(reflect)了 name window.open 的参数被调用来打开它的方法;在框架上,它反射(reflect)了 name <frame> 的属性(或 <iframe> )包含它的元素。预计脚本将希望通过 name 访问和导航相关窗口(甚至子窗口,例如框架内的框架)。即使跨不同的域,甚至在原始文档已被导航时也是如此。(*)

因此 window 的许多属性,包括 name ,可以从原点外部访问,并且为了兼容性 remain there today ,由于由此产生的层出不穷的浏览器安全漏洞,产生了大量复杂的警告和限制。

(* 事实证明,没有多少人愿意这样做,但他们确实希望能够在不同域的两个窗口之间传递字符串数据。现在我们只使用 window.postMessage这是为了这个明确的目的而设计的,但当时唯一的方法是使用唯一对双方都可读可写的属性 name 。这是笨拙且有限的,但许多现有网站都这样做了,使其很难从网络平台中删除。)

结果:将东西放入 window可能会产生不可预见的后果,因此请尝试将全局变量保持在绝对最小值,并避免像 name 这样的现有属性.

关于javascript - 使用 JavaScript,为什么看起来可以使用 window 对象在页面之间传递值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com