Javascript 在html页面之间共享变量
首先,我知道这个主题还在StackOverflow中,但我还没有完全理解它是如何工作的,阅读现有的答案。所以,对不起,我希望现在能理解 我不知道我的方法是否正确,为什么不正确 我有一个html页面,它的行为类似于其他几个页面的“visor”,因此从这个“main”页面,我可以看到其他页面将它们嵌入visor页面的某个区域(使用iframe) 同时,我为所有页面(包括visor)提供了一个通用的.js文件 例如,如果我在.js中声明了一个值为“hello world”(字符串类型)的变量,那么我可以从visor或嵌入式页面访问该变量,并且仍然保留其原始值。 但如果我从visor(或embedded)更改其valor,则另一页无法读取从另一页更改的新valor 可能会使页间变量?成为全局变量 我尝试使用localStorage,但它只适用于使用它的特定页面 让我们看看,或多或少: .JS文件Javascript 在html页面之间共享变量,javascript,html,variables,Javascript,Html,Variables,首先,我知道这个主题还在StackOverflow中,但我还没有完全理解它是如何工作的,阅读现有的答案。所以,对不起,我希望现在能理解 我不知道我的方法是否正确,为什么不正确 我有一个html页面,它的行为类似于其他几个页面的“visor”,因此从这个“main”页面,我可以看到其他页面将它们嵌入visor页面的某个区域(使用iframe) 同时,我为所有页面(包括visor)提供了一个通用的.js文件 例如,如果我在.js中声明了一个值为“hello world”(字符串类型)的变量,那么我可
var Example = "Hello world";
function TellMe()
{
alert(Example);
}
function ChangeVar()
{
Example = "Goodbye world";
}
localStorage["Example"] = "Hello world";
function TellMe()
{
alert(localStorage["Example"]);
}
function ChangeVar()
{
localStorage["Example"] = "Goodbye world";
}
第1页(当然,标题部分有引用的.js文件)
点击!
第2页(当然在页眉部分有引用的.js文件),但是在单击了第1页的div之后
<div onclick="TellMe();">click!</div>
<div onclick="TellMe();">click!</div>
点击!
这将提醒“你好世界”,而不是“再见世界”
因此,我知道每个页面都有自己版本的.js变量,即使所有页面都使用相同的.js,甚至从另一个页面访问一个html(嵌入iframe)
在第2页的div中单击消息“再见世界”后,如何得到这个示例
我会更详细地解释,看看有多少答案是关于黑客、浪费其他页面和膨胀银行账户的 这只是一个文档页面(来自软件),我有一个“visor”页面,我可以从它访问其他页面。实际上,我在根文件夹中有“visor”页面,而其他页面,在这个根目录的文件夹中,都在同一个域中,不是吗
我希望页面上有“next”(下一页)和“previus”(上一页)按钮,以避免用户返回visor并选择新页面,但我需要知道用户正在查看的页面编号,以了解下一页或previus显示的页面。这里的问题是Javascript的安全问题 由于
CORS
问题,即使执行诸如jQuery.load()
之类的简单事件,页面上的其他脚本也不会加载
变量
无法在页面之间传递,尤其是使用iFrame
,因为可能存在各种恶意活动
我的建议是在每个iframe
中加载相同的JS
文档(如果您能够这样做的话)
您将无法
将js
文件加载到不在您的域中的站点。HTML本地存储应该是您需要的。
以下是了解更多信息的链接-
您还可以使用称为JavaScript会话的window.name
。但它只在使用相同的窗口/选项卡时起作用。链接-
而且很明显还有饼干
我的优先顺序将是我陈述解决方案的顺序。我将与您分享一个关于localstorage的非常简单的示例,它将解决您的需求。
假设您有两个文件pG1.1.html和pGE2.html。
在page1.html的内部添加以下行
<div id="notes">
</div>
<script>
if(typeof(Storage)!=="undefined")
{
localStorage.lastname="Smith";
document.getElementById("notes").innerHTML="Last name: " + localStorage.lastname;
}
else
{
document.getElementById("notes").innerHTML="Sorry, your browser does not support web storage...";
}
</script>
if(类型(存储)!=“未定义”)
{
localStorage.lastname=“Smith”;
document.getElementById(“notes”).innerHTML=“Last name:”+localStorage.lastname;
}
其他的
{
document.getElementById(“notes”).innerHTML=“对不起,您的浏览器不支持web存储…”;
}
页面2.html的内部
<div id="notes">
</div>
<script>
if(typeof(Storage)!=="undefined" && localStorage.lastname)
{
document.getElementById("notes").innerHTML="Last name: " + localStorage.lastname;
}
else
{
document.getElementById("notes").innerHTML="Sorry, your browser does not support web storage...";
}
</script>
if(typeof(Storage)!=“undefined”&&localStorage.lastname)
{
document.getElementById(“notes”).innerHTML=“Last name:”+localStorage.lastname;
}
其他的
{
document.getElementById(“notes”).innerHTML=“对不起,您的浏览器不支持web存储…”;
}
现在,您可以在任何页面中访问localstorage中的值
另一个选项
您可以通过querystring参数将值从一个页面传递到另一个页面。
例如,
现在在page2.html中,您可以通过javascript获取该索引值并设置必填字段
希望这能回答你们的问题。是的,基本上,你们都是对的
只需在localStorage.variableToManipulate中的页面之间存储要操作的变量就足够了。如果我们愿意的话,直接
这样就足够了(我将重复我的第一个示例):
.JS文件
var Example = "Hello world";
function TellMe()
{
alert(Example);
}
function ChangeVar()
{
Example = "Goodbye world";
}
localStorage["Example"] = "Hello world";
function TellMe()
{
alert(localStorage["Example"]);
}
function ChangeVar()
{
localStorage["Example"] = "Goodbye world";
}
第1页(当然,标题部分有引用的.js文件)
点击!
第2页(当然在页眉部分有引用的.js文件),但是在单击了第1页的div之后
<div onclick="TellMe();">click!</div>
<div onclick="TellMe();">click!</div>
点击!
但是,有一件事,当您进行这种测试时,请记住只打开了一个html页面。我在测试时打开了两个(Visor和PageN),我认为每个都在使用自己的localStorage变量实例(由自己的页面本身修改)
只是一个新手犯的愚蠢错误!。很抱歉,非常感谢你能来帮忙 我知道现在已经晚了,但是无论谁想要在同一个域下的页面之间共享数据,他们都可以利用您选择的这个问题的标记(“页面之间的html变量”)不太可能对您有所帮助。然而,“html变量”可能就足够了。(也就是说“中间”不是一个好的主题名称。)好的,richard,谢谢你的观点。可以跨多个页面持久化(如果不起作用,则说明您做错了):“来自域的所有页面共享同一存储区域,因此您可以使用此机制在多个页面之间保持数据持久化。数据也可以