我们可以在浏览器会话中跨网页引用JavaScriptvariables吗?
通过JavaScript的w3schools教程 ,发现下面的声明:
全局variables具有全局范围:网页上的所有脚本和函数都可以访问它。
所以,我的查询是,我们有办法引用在特定的网页中声明的variables?
例如,在C语言中,我们有extern关键字,使用它我们可以访问在另一个文件中声明的variables,但是我们可以在我们的文件中引用它。
例如:
在fileA.html的脚本标签里,我们声明了var x = 50
,在function()
声明之外,所以它是全局的wrt fileA.html。 如果我有fileB.html,我们可以参考fileB.html中embedded的脚本标记中的x?
只是要清楚,这不是在网页上重复使用JavaScript文件的情况。
你可以使用Web Workers
; MessageChannel
,请参阅如何从另一个iFrame清除iFrame的内容 ; 或window.postMessage()
在浏览上下文之间传递或传递variables。
一种利用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(); }
哈哈,不。 ;)
当浏览器离开页面时,全局范围和所有脚本在下一页加载前完全卸载。
允许一个页面访问另一个页面的variables将是一个巨大的安全漏洞。
如果您的网页位于相同的DOMAIN中,则可以共享本地存储。 您可以将string存储在localStorage中并将其加载到文档中。 但是,您将需要自己处理并发/读写问题。
所谓“全球”,是指全球范围内宣布的特定文字。 只要脚本和其他所有variables一起执行,它们就会被销毁。
你可以通过cookies来做你正在谈论的事情(在网页之间传递价值观)。 它们存储在用户计算机上,除非明确销毁或过期,否则不会被销毁。
您可以使用本地存储和会话存储实现相同的function。
MDN
W3Schools的
是的是种“可能”,有一个概念调用ever cookie
,即使你从浏览器更改为浏览器,意图坚持不惜一切代价一个cookie,这个想法是存储在浏览器中的任何可用的存储机制(本地存储,cookie,flash cookie,indexDB等)的数据。 因此,如果其中一个存储失败,则Cookie将从一个位置复制到另一个位置,同时一个存储与Cookie数据一起存在,这将一直持续存在。 如果用户具有Flash Local Shared Object cookie
则可以使用跨浏览器支持
来源: http : //samy.pl/evercookie/
说:我不认为使用这种方法是一个好主意,也许简单的localStorage['myvariable'] = {data:"data"}
就足够了。