在html页面之间共享变量

时间:2014-01-15 03:38:35

标签: javascript html variables

首先,我知道这个主题还在StackOverflow中,但我还没有完全理解它是如何工作的,正好阅读现有的答案。所以,对不起,我希望现在明白。

我不知道我的指示是否不正确以及为什么它不正确。

我有一个html页面,就像另一些“遮阳板”一样,所以从这个“主”页面,我可以看到其他的页面将它们嵌入遮阳板页面区域(使用iframe)。 / p>

与此同时,我为所有页面(包括遮阳板)都有一个共同的.js文件。

因此,例如,如果我在.js中使用“hello world”(字符串类型)的valor声明变量,我可以从visor或嵌入页面访问此变量,并且仍然具有其原始值。 但是如果我从遮阳板(或嵌入式)改变它的勇气,那么另一页就无法读取从另一页改变的新的勇气。

它可以创建一个global-between-pages变量吗?。

我尝试使用localStorage,但它仅适用于使用它的特定页面。

所以,让我们看看,或多或少:

.JS FILE

var Example = "Hello world";

function TellMe()
{
    alert(Example);
}

function ChangeVar()
{
    Example = "Goodbye world";
}

第1页(当然,在头部中引用了.js文件)

<div onclick="ChangeVar();">click!</div>

第2页(当然,在头部中引用了.js文件),但是点击了第1页的AFTER div

<div onclick="TellMe();">click!</div>

这将提醒“Hello World”,代替“Goodbye World”。

所以我理解每个页面都有自己的.js变量版本,即使所有页面都使用相同的.js,甚至当一个html从另一个html访问时(嵌入iframe)。

如果点击第2页的div并显示“Goodbye World”消息后,如何获得此示例?


我会更加解释,看到有关黑客的答案数量,浪费其他页面以及虚增银行账户。

这只是一个文档页面(来自软件),我有一个“遮阳”页面,从中我可以访问其他页面。实际上我在根文件夹中有“visor”页面,而其他页面,在这个根目录下的一个文件夹中,都在同一个域中,不是吗?。

我想要页面上的“next”和“previus”按钮,以避免用户回到遮阳板并选择新页面,但我需要知道用户正在观看的页面的数量,知道下一页显示的页面或者说是先天。

5 个答案:

答案 0 :(得分:5)

我正在分享一个关于localstorage的非常简单的例子,它可以解决你的需求。 假设您有两个文件page1.html和page2.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>

在page2.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>

您现在可以在任何页面中访问localstorage中的值。

另一个选项

您可以通过querystring参数将值从一个页面传递到另一个页面。 例如。 <a href='page2.html?index=someValue'>goto next page</a> 现在在page2.html中,您可以通过javascript获取此索引值并设置所需字段。

希望能回答您的问题。

答案 1 :(得分:2)

HTML本地存储应该是您正在寻找的。 这是一个了解更多信息的链接 - http://diveintohtml5.info/storage.html

您也可以使用window.name称为JavaScript会话。但只有使用相同的窗口/标签,它才有效。链接 - http://www.thomasfrank.se/sessionvars.html

另外明显有饼干。

我的偏好顺序是我说明我的解决方案的顺序。

答案 2 :(得分:1)

此处的问题是Javascript的安全问题。

即使执行jQuery .load()之类的简单事件,由于CORS问题,页面上的其他脚本也无法加载。

Variables在页面之间无法通过,尤其是iframes,因为可能会发生各种各样的恶意活动。

我的建议是在您正在进行的每个JS内加载相同的iframe文档(如果您能够这样做的话。)。

您将无法将load js个文件存入您网域内的网站。

答案 3 :(得分:1)

是的,基本上,你们都是对的。

只需存储您想要在localStorage.variableToManipulate内的页面之间操作的变量就足够了。直接,如果我们想要。

这就足够了(我会重复我的第一个例子):

.JS FILE

var localStorage.Example = "Hello world";

function TellMe()
{
    alert(localStorage.Example);
}

function ChangeVar()
{
    localStorage.Example = "Goodbye world";
}

第1页(当然,在头部中引用了.js文件)

<div onclick="ChangeVar();">click!</div>

第2页(当然,在头部中引用了.js文件),但是点击了第1页的AFTER div

<div onclick="TellMe();">click!</div>

但是,只有一件事,当你进行这种测试时,记得只打开一个html页面。我正在测试打开的两个(Visor和PageN),我认为每个人都使用自己的localStorage变量实例(由自己的页面本身修改)。

只是一个菜鸟愚蠢的错误!对不起,非常感谢你伸出援助之手!

答案 4 :(得分:0)

我知道已经晚了,但是谁想在同一域下的页面之间共享数据,他们可以利用SharedWorker