【发布时间】:2011-02-06 13:21:00
【问题描述】:
我有两个浏览器选项卡,tab1 和 tab2。
我在 tab1 中有一个名为 execute 的函数,我想从 tab2 中的页面调用它。
这可能吗?如果可以,怎么做?
【问题讨论】:
-
您现在可以使用 localStorage 存储事件或使用该事件的库来执行此操作。
标签: javascript
我有两个浏览器选项卡,tab1 和 tab2。
我在 tab1 中有一个名为 execute 的函数,我想从 tab2 中的页面调用它。
这可能吗?如果可以,怎么做?
【问题讨论】:
标签: javascript
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”。
【讨论】: