在同一浏览器的选项卡/窗口之间进行Javascript通信的最可靠方法是什么?例如,当Tab 2开始音频播放时,Tab 1以某种方式知道这一点并且可以暂停它的播放器.
我正在建立一个带有音乐播放器的网站...所以,如果你打开两个标签到网站,你可以在两者上开始播放音乐.这显然很糟糕,所以我试图找到一个解决方案.
有任何想法吗?谢谢
我有两个窗口:窗口A和窗口B.
问题:
我知道这样做的两种方式:
但这两种方式并不那么优雅.
例如,获得窗口B的引用并使用window.postMessage()(HTML5)会很不错
最终的目标是制作像facebook这样的东西,如果你打开4个Facebook标签并在一个标签中聊天,聊天是最新的每个Facebook标签,这是整洁的!
共享Web Workers旨在允许来自同一站点(源)的多个页面共享单个Web Worker.
但是,如果您只有一个窗口/选项卡并且您导航到同一站点上的另一个页面,那么我不清楚规范(或其他有关共享工作者的教程和信息)共享工作者是否会持久存在.
这对于来自共享工作者的WebSocket连接的情况最有用,该连接在网站导航时保持连接.例如,想象一下即使在网站导航时也会持续存在的股票代码或聊天区域(无需重新连接WebSocket).
我在页面上创建了一个iframe,并且页面的域名被明确设置为"xyz.com",但iframe的域名默认为"dev.xyz.com",这是我正在开发的实际域名.
问题是,当我尝试通过iframe.contentWindow.document访问iframe时,由于域的不同而失败.
我已经尝试将iframe的src设置为一个带有document.domain ='xyz.com'的文件,但这似乎没有做到这一点......
有任何想法吗?
如何在同一个域上有两个选项卡(或窗口)能够相互通信而无需另一个窗口实例.
编辑:为什么在另一个问题之前被问到这个标记为重复?
这是我的代码:
<script type="text/javascript">
function getLocalStorage() {
try {
if (!! window.localStorage) return window.localStorage;
} catch(e) {
return undefined;
}
}
function getAddEventListener() {
try {
if( !! window.addEventListener ) return window.addEventListener;
} catch(e) {
return undefined;
}
}
function eventHandler(e) {
alert("here we are = " + e.storageArea.traveler);
}
function testStorage() {
var db = getLocalStorage();
var addEL = getAddEventListener();
if(addEL) {
addEL('storage', eventHandler, false);
} else {
alert('This browser does not support event listeners');
}
db.setItem('traveler', 'Bill');
db.setItem('destination', 'Ventura'); …Run Code Online (Sandbox Code Playgroud) 我正在使用本地存储来存储一些数据:用户发出ajax请求以获取信息,我将结果存储在存储中,以便下次他请求相同的信息时,我首先查看存储以查看它是否存在.
现在我意识到将数据保存在内存中的对象实际上更有效,并在需要时循环,然后循环遍历本地存储.因此,当我将一些数据从本地存储移动到内存中对象时,我想知道是否可以可靠地使用window.unload事件将该缓存对象的内容写入磁盘上的本地存储,然后检索它回来使用onload事件?
谢谢.
javascript ×6
html5 ×3
browser ×1
cross-domain ×1
html ×1
iframe ×1
postmessage ×1
web-worker ×1
websocket ×1
windows ×1