Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以在浏览器会话中跨网页引用JavaScript变量吗?_Javascript_Html_Extern - Fatal编程技术网

我们可以在浏览器会话中跨网页引用JavaScript变量吗?

我们可以在浏览器会话中跨网页引用JavaScript变量吗?,javascript,html,extern,Javascript,Html,Extern,检查JavaScript时,发现以下语句: 全局变量具有全局作用域:网页上的所有脚本和函数都可以访问它 所以,我的问题是,我们是否有方法引用特定网页中声明的变量 例如,在C中,我们有extern关键字,使用它我们可以访问在另一个文件中声明的变量,但我们可以在文件中引用它 例如: 在fileA.html的script标记内部,我们声明了var x=50,在function()声明外部,因此它是全局w.r.t fileA.html。 如果我有fileB.html,我们可以从fileB.html中包含

检查JavaScript时,发现以下语句:

全局变量具有全局作用域:网页上的所有脚本和函数都可以访问它

所以,我的问题是,我们是否有方法引用特定网页中声明的变量

例如,在C中,我们有extern关键字,使用它我们可以访问在另一个文件中声明的变量,但我们可以在文件中引用它

例如:

在fileA.html的script标记内部,我们声明了
var x=50
,在
function()
声明外部,因此它是全局w.r.t fileA.html。 如果我有fileB.html,我们可以从fileB.html中包含的脚本标记中引用x吗

需要明确的是,这不是跨网页重用JavaScript文件的场景。

lol No.;)

当浏览器离开某个页面时,在加载下一个页面之前,将完全卸载全局作用域和所有脚本


允许一个页面访问另一个页面的变量将是一个巨大的安全漏洞。

如果您的网页位于同一个域中,它们可能共享本地存储。您可以将字符串存储在localStorage中,并将其加载到DocumentReady上。但是,您需要自己处理并发/读写问题。

所说的“全局”是指在声明它们的特定脚本中全局的。一旦脚本完成执行,它们将与除cookie之外的所有其他变量一起销毁


你可以通过cookies来做你正在谈论的事情(在网页之间传递值)。它们存储在用户计算机上,除非明确销毁或过期,否则不会销毁。

您可以使用本地存储和会话存储来实现相同的功能

您可以使用,看见或者在浏览上下文之间通信或传递变量


利用

fileA.html

<!DOCTYPE html>
<html>
  <head>
    <script src="scriptA.js"></script>
  </head>
  <body>
    <a href="fileB.html" target="_blank">fileB</a>
  </body>
</html>
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="style.css">
    <script src="scriptB.js"></script>
  </head>
  <body>
  </body>
</html>
fileB.html

<!DOCTYPE html>
<html>
  <head>
    <script src="scriptA.js"></script>
  </head>
  <body>
    <a href="fileB.html" target="_blank">fileB</a>
  </body>
</html>
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="style.css">
    <script src="scriptB.js"></script>
  </head>
  <body>
  </body>
</html>
worker.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
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("");
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();
}
是的,这是一种“可能”,有一个概念称为“ever cookie”,它旨在不惜一切代价保留一个cookie,即使您从一个浏览器切换到另一个浏览器,其想法是将数据存储在浏览器中的任何可用存储机制(本地存储、cookie、flash cookie、indexDB等)中。因此,如果其中一个存储发生故障,cookie将从一个位置复制到另一个位置,因此,同时一个存储中的cookie数据处于活动状态,这将始终保持。如果用户具有
Flash本地共享对象cookie

资料来源:


说:我认为使用这种方法不是一个好主意,也许一个简单的
localStorage['myvariable']={data:“data”}
就足够了

因此,如果我在一个页面
Page1.html
中包含Jquery,而在
Page2.html
中不包含Jquery。现在我从page1导航到page2,jquery是否可以在page2中使用(或有效?@epascarello我用jqueryUI和bootstrap尝试过,两者都会影响page2中的UI元素。我很困惑,我在哪里可以得到澄清?我怀疑jquery在第2页上是否有效,如果你没有包括它。你为什么笑?他不是在开玩笑,他是在问一个真正的问题,为什么要光顾一个答案?JavaScript全局变量相对于包含的全局上下文是“全局的”(它们只是所述上下文的属性)-在浏览器中是窗口对象,在每次页面加载和每次重新加载或导航时都会被销毁/重新创建。每个IFRAME也将建立自己的窗口上下文,尽管有一些跨越的规则。请尽快退出w3schools,它充满了错误。@RobG,我正前往MDN教程->@a3.14Infinity查看更新的帖子;包括一种利用
SharedWorker
的方法,我相信这些技术只能跨帧边界工作,而不能跨顶层的导航操作。@Tom在OP中给出了文件的描述,如果文件在同一域中,只有当一页被另一页框住时,才能将
x
fileA.html
传递到
fileB.html
@guest271314。从OP中不清楚是否涉及到框架,链接的W3C页面也不建议这样做。如果浏览器访问page1,然后是page2,page2希望访问由page1定义的全局变量,那么答案是这是不可能的。page1脚本不再在内存中,也不在JS解释器中。完成此任务的唯一方法是page1将数据整理成字符串并存储在cookie或LocalStorage中,在页面卸载之前显式向前传递。@guest271314:看起来很有趣。我尝试在本地运行该示例,但遇到一个错误:Uncaught SecurityError:无法构造“SharedWorker”:(scriptB.js中发生了故障)无法从源“null”访问worker.js。我遗漏了什么吗?@a3.14Infinity在chromium的
文件:
协议和plnkr上都尝试过。您使用的是哪个浏览器?