¿Podemos referirnos a las variables de JavaScript en las páginas web en una sesión de navegador?
html extern (6)
Pasando por el tutorial de w3schools para JavaScript, se encuentra la siguiente declaración:
Una variable global tiene alcance global: todos los scripts y funciones en una página web pueden acceder a ella.
Entonces, mi consulta es, ¿tenemos alguna forma de referirnos a las variables declaradas en una página web en particular?
Por ejemplo, en C, tenemos una palabra clave externa, con la cual podemos acceder a las variables que se declaran en otro archivo, pero podemos referirnos a ella en nuestro archivo.
Por ejemplo:
Dentro de la etiqueta de script de fileA.html, hemos declarado
var x = 50
, declaración de
function()
externa
function()
, por lo que es global wrt fileA.html.
Si tengo fileB.html, ¿podemos referirnos a x desde la etiqueta de script incorporada en fileB.html?
Para ser claros, este no es un escenario de reutilización de archivos JavaScript en páginas web.
Por "global" se refieren a global en todo el guión particular en el que se declaran. Se destruyen tan pronto como el script finaliza su ejecución junto con todas las demás variables, excepto las cookies.
Puede hacer lo que está hablando (pasar valores entre páginas web) a través de cookies. Se almacenan en las computadoras de los usuarios y no se destruyen a menos que se destruyan explícitamente o caduquen.
Puedes usar
Web Workers
;
MessageChannel
, vea
Cómo borrar el contenido de un iFrame de otro iFrame
;
o
window.postMessage()
para comunicar o pasar variables entre contextos de navegación.
Un enfoque que utiliza
SharedWorker
fileA.html
<!DOCTYPE html>
<html>
<head>
<script src="scriptA.js"></script>
</head>
<body>
<a href="fileB.html" target="_blank">fileB</a>
</body>
</html>
scriptA.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
fileB.html
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="scriptB.js"></script>
</head>
<body>
</body>
</html>
scriptB.js
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("");
worker.js
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();
}
Sí, es "posible", hay una llamada de concepto
ever cookie
, que intenta mantener una cookie a toda costa, incluso si cambia de un navegador a otro, la idea es almacenar en cualquier mecanismo de almacenamiento disponible en el navegador (almacenamiento local , cookie, flash cookie, indexDB, etc.) los datos.
Por lo tanto, si falla uno de los almacenamientos, la cookie se copia de una ubicación a otra, por lo tanto, mientras un almacenamiento esté vivo con los datos de la cookie, esto persistirá siempre.
El soporte de navegador cruzado podría funcionar si el usuario tiene una
Flash Local Shared Object cookie
la fuente: http://samy.pl/evercookie/
Dicho esto: no creo que sea una buena idea utilizar este enfoque, tal vez con un simple
localStorage[''myvariable''] = {data:"data"}
podría ser suficiente.
Si sus páginas web están en el mismo DOMINIO, podrían compartir un almacenamiento local. puede almacenar cadenas en localStorage y cargarlas en el documento listo. Sin embargo, deberá manejar los problemas de concurrencia / lectura y escritura.
lol No.;)
Cuando el navegador navega fuera de una página, el alcance global y todos los scripts se descargan completamente antes de cargar la siguiente página.
Permitir que una página acceda a las variables de otra página sería un enorme agujero de seguridad.