我有两个浏览器标签页,分别是tab1和tab2。
在tab1中有一个名为execute的函数,我想从tab2页面调用它。
这是否可能,如果可能的话该怎么做?
我有两个浏览器标签页,分别是tab1和tab2。
在tab1中有一个名为execute的函数,我想从tab2页面调用它。
这是否可能,如果可能的话该怎么做?
JavaScript在浏览器中不能进行跨标签页脚本操作(这将存在安全风险)。
然而,如果第二个标签页是通过window.open()
调用打开的,并且浏览器设置为在新标签页中打开弹出窗口,则是的,“tab1”可以与“tab2”通信。
第一个标签页/窗口被称为opener
,因此新标签页可以使用以下格式调用打开者上的函数:
opener.doSomething();
同样地,打开者可以通过使用创建弹出窗口时创建的变量,在新标签/弹出窗口上调用函数。var myPopup = window.open(url, name, features);
myPopup.doStuffOnPopup();
有一个微小的开源组件可以在多个标签页中同步/锁定/调用代码,允许您在标签页之间发送消息(免责声明:我是其中的贡献者之一!)
https://github.com/jitbit/TabUtils
可以这样调用:
TabUtils.BroadcastMessageToAllTabs("messageName", data);
然后在另一个选项卡中:
TabUtils.OnBroadcastMessage("messageName", function (data) {
//do something
});
基于onstorage
事件,您可以简单地修改需要的代码,这非常简单。
你应该先展示你的 HTML 代码,但假设你的选项卡有一个链接,你可以这样做:
<a href="some-path" id="tab2">Tab 2</a>
jQuery:
$('#tab2').click(function(){
// Your function code here
// Prevent the default action
return false;
})
你可以将 JavaScript 函数引用作为参数传递给其他函数(注意对象执行上下文)。
因此,在初始化“tab2”时,你可以将“tab1”的execute函数引用发送到“tab2”中。