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

bri*_*ant 3 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>
Run Code Online (Sandbox Code Playgroud)

而cat.php是这样的:

<!DOCTYPE html>
<html>
<body>

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

<script>
document.getElementById("KittyTalks").innerHTML = window.MyWord;
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

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

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

Cam*_*kie 7

它不是一个变量,但您可以使用会话存储.要实现您的示例,您可以执行以下操作:

sessionStorage.setItem('MyWord', 'Bingo');
Run Code Online (Sandbox Code Playgroud)

在第一页,然后

document.getElementById("KittyTalks").innerHTML = sessionStorage.getItem('MyWord');
Run Code Online (Sandbox Code Playgroud)

在第二页.

如果你想获得一点点发烧友,你可以定义一个属性.在这两个页面上,您将放置如下代码:

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

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