我们可以在浏览器会话中跨网页引用 JavaScript 变量吗?
Can we refer to JavaScript variables across webpages in a browser session?
浏览 w3schools JavaScript 教程,找到以下语句:
全局变量具有全局范围:网页上的所有脚本和函数都可以访问它。
所以,我的问题是,我们有没有办法引用在特定网页中声明的变量?
例如,在 C 中,我们有 extern 关键字,使用它我们可以访问在另一个文件中声明的变量,但我们可以在文件中引用它。
例如:
在 fileA.html 的脚本标签内部,我们已经声明了 var x = 50
,在声明之外function()
,所以它是全局的 w.r.t fileA.html。如果我有 fileB.html,我们可以从 fileB.html 中体现的脚本标签中引用 x 吗?
需要明确的是,这不是跨网页重用JavaScript文件的场景。
您可以使用Web Workers
; MessageChannel
,请参阅如何从另一个 iFrame 中清除 iFrame 的内容;或window.postMessage()
在浏览上下文之间通信或传递变量。
一种利用SharedWorker
的方法
fileA.html
<!DOCTYPE html>
<html>
<head>
<script src="scriptA.js"></script>
</head>
<body>
<a href="fileB.html" target="_blank">fileB</a>
</body>
</html>
scriptA.js
var x = 50, p;
var worker = new SharedWorker("worker.js");
worker.port.addEventListener("message", function(e) {
alert(e.data);
if (!p) {
p = document.createElement("p");
p.innerHTML = e.data;
document.body.appendChild(p)
}
}, false);
worker.port.start();
console.log("Calling the worker from fileA")
worker.port.postMessage(x); // post `50` to worker
fileB.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="scriptB.js"></script>
</head>
<body>
</body>
</html>
scriptB.js
var x, p;
var worker = new SharedWorker("worker.js");
worker.port.addEventListener("message", function(e) {
if (!x && !p) {
x = e.data; // at `connections`:`1` : `e.data`:`50`
p = document.createElement("p");
p.innerHTML = "Message from fileA:" + x;
document.body.appendChild(p)
}
}, false);
worker.port.start();
console.log("Calling the worker from fileB");
worker.port.postMessage("");
worker.js
self.x = null, connections = 0;
onconnect = function(e) {
var port = e.ports[0];
++connections;
port.addEventListener("message", function(e) {
if (!self.x) {
self.x = e.data;
port.postMessage("Received:" + self.x
+ " from fileA, total connections:"
+ connections);
} else {
port.postMessage("fileB received:" + self.x
+ " total connections:"
+ connections);
}
});
port.start();
}
lol No. ;)
当浏览器导航离开页面时,全局范围和所有脚本将在加载下一页之前完全卸载。
允许一个页面访问另一个页面的变量将是一个巨大的安全漏洞。
如果您的网页位于同一域中,它们可以共享一个 localStorage。 您可以将字符串存储在 localStorage 中,并将它们加载到文档就绪上。但是,您需要自己处理并发/读写问题。
"global"是指在声明它们的特定脚本中全局的全局。一旦脚本完成执行,它们就会与除 cookie 之外的所有其他变量一起销毁。
您可以通过 cookie 执行您正在谈论的操作(在网页之间传递值)。它们存储在用户计算机上,除非明确销毁或过期,否则不会销毁。
您可以使用本地存储和会话存储来实现相同的目的。
多核
W3学校
是一种"可能",有一个概念调用ever cookie
,即使您从浏览器更改为浏览器,它打算不惜一切代价保留cookie,这个想法是将数据存储在浏览器中的任何可用存储机制(本地存储,cookie,flash cookie,indexDB等)。因此,如果其中一个存储失败,cookie 会从一个位置复制到另一个位置,因此同时一个存储与 cookie 数据一起处于活动状态,这将始终存在。如果用户有Flash Local Shared Object cookie
,跨浏览器支持可能会起作用
来源:http://samy.pl/evercookie/
说:我认为使用这种方法不是一个好主意,也许一个简单的localStorage['myvariable'] = {data:"data"}
就足够了。
- 引用对象中的通用值
- 如何在JavaScript中将字符串转换为函数引用
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 在动态创建的元素上获取对特定选择器的引用
- IIFE中的函数引用不可用
- 如何通过引用var Using DataTables来进行分页或排序
- 如何在创建键时引用来自同一对象的键
- 如何防止网页加载后自动启动功能
- Datatables:通过DOM数据源中的名称引用列
- 自引用回调
- 引用类变量中的原型方法
- 无法获取属性'selectedIndex'的未定义引用或null引用
- 如何使用Node.js最有效地解析网页
- 如何有条件地将引用人重定向到不同的网页
- 我们可以在浏览器会话中跨网页引用 JavaScript 变量吗?
- 如何从网页引用打字稿文件
- 当我在 JavaScript 中按 Tab 时如何引用网页
- 由于引用了相同的javaScript文件,Kendo UI控件没有显示在网页上,如何克服这一点
- 从我的网页中引用D3.js库
- 我应该有我的网页引用的jquery.js在我自己的服务器或从code.jquery.com的副本