[英]How to communicate between two html pages via JavaScript?
假设我有两个 html 页面并在两个选项卡中打开它们。 我想让他们交流。 例如,当我单击第一页上的按钮时,它应该调用一个在第二页上执行某些操作的函数。
function Test() { document.getElementById('test').innerHTML = "Test"; }
<!DOCTYPE html> <html> <head> <script src="index.js"></script> </head> <body> <button onclick="Test()">Click here</button> </body> </html>
第二页:
<!DOCTYPE html> <html> <head> <script src="index.js"></script> </head> <body> <p id="test"></p> </body> </html>
当我单击第一页上的按钮时,它应该在第二页的p
标记中写入Test
。 它们可以使用相同的 JavaScript 文件。 但我怎样才能做到这一点?
你不能只用 JavaScript 来做到这一点。 重点是:JS 是一种客户端语言,这意味着它由客户端(浏览器)下载并由它(而不是由服务器)运行。 为了让 2 个页面进行通信,您已经通过某种媒介以某种方式建立了通信。 介质可以是:
所以,如果你对第三个选项感兴趣,你应该阅读window.open
, window.opener
, window.parent
。
var newWindow = window.open(url, name, params);
将打开一个新窗口(比如您的第二页)并为您带来一个变量newWindow
,它是对打开窗口的window
对象的引用。 尝试例如
newWindow.write("haha, I'm controlling this stuff!");
同样,在第二个窗口中,您可以使用
var oldWindow = window.opener;
您还可以使用许多方法( window``.close
、 .moveBy
、 .moveTo
、 .resizeBy
、 .resizeTo
等)。
但是请记住,此交互将仅限于您的浏览器:如果您更改浏览器中显示的内容(例如向页面添加一些文本),这不会影响服务器上存储的实际页面,因为这需要您服务器通过一些服务器端脚本做一些事情。
PS 要推进这项技术,您可能需要阅读window.postMessage
但这主要是为跨域页面之间的通信而设计的。
PPS 其实,还有更多!
需要注意的一件事是localStorage
和sessionStorage
有setItem
方法,它在window
上生成'storage'
事件(尝试localStorage.setItem('key', 'value');
和window.addEventListener('storage', event => console.log(event.key));
)
另一个,就像安德森格林指出的那样,是广播频道 API (尝试const channel = new BroadcastChannel('my_channel')
、 channel.postMessage('Hi there!')
和channel.addEventListener('message', event => console.log(event))
)。
最后,您可以使用一些现成的解决方案,例如tabs-router 、 Hermes 、 Visibility 、 Duel和SE 。
那些说俄语的人也可以在这篇文章中找到更多有用的细节(哇!)。
尝试使用 cookie。 这是我能想到的最简单的方法。 这个网站似乎有帮助: https : //www.w3schools.com/js/js_cookies.asp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.