在一个窗口中创建所有打开页面看到的变量是否可能?

时间:2016-12-20 16:01:40

标签: javascript

在JavaScript中有没有办法让一个变量保持“活着”并可在一个窗口中打开的所有页面中访问?

我创建了两个页面dog.php和cat.php。

dog.php是这样的:

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
MyWord = "Bingo";
document.getElementById("demo").innerHTML = window.MyWord;
</script>

<p><a href="http://example.com/my_wnd_obj/cat.php">go to the cat page</a></p>

</body>
</html>

并且cat.php是这样的:

<!DOCTYPE html>
<html>
<body>

<p id="KittyTalks"></p>

<script>
document.getElementById("KittyTalks").innerHTML = window.MyWord;
</script>
</body>
</html>

然而,cat.php读取“undefined”而不是“Bingo”,这意味着cat.php页面没有看到在dog.php中创建的变量MyWord。

有没有办法让它看到那个变量?

3 个答案:

答案 0 :(得分:7)

它不是一个变量,但您可以使用Session Storage。要实现您的示例,您可以执行以下操作:

sessionStorage.setItem('MyWord', 'Bingo');

在第一页上,然后

document.getElementById("KittyTalks").innerHTML = sessionStorage.getItem('MyWord');

在第二页。

如果你想获得一点点发烧友,你可以define a property。在这两个页面上,您将放置如下代码:

Object.defineProperty(window, "MyWord",
    {
        get:()=>sessionStorage.getItem("MyWord"),
        set:(val)=>sessionStorage.setItem("MyWord", val)
    }
);

然后你可以像常规变量一样使用它。

答案 1 :(得分:3)

您可以使用localstorage:https://developer.mozilla.org/en/docs/Web/API/Window/localStorage

dog.php上有类似的东西:

localStorage.setItem('MyWord', 'Bingo');

然后在cat.php上:

var myWord = localStorage.getItem('MyWord');

答案 2 :(得分:1)

使用本地存储!

http://www.w3schools.com/html/html5_webstorage.asp

但请记住,此变量对于同一主机上的所有Windows / future会话都是可见的!

// Store
localStorage.lastname = "Smith";
// Retrieve
document.getElementById("result").innerHTML = localStorage.lastname;