我有一种单页面应用程序,在一种情况下,我需要在第二个选项卡中打开我的应用程序,第二个选项卡必须打开并显示特定的局部视图。
我有这个功能在新标签页中打开应用程序:
function OpenInNewTab(id) {
var win = window.open("Index","_blank");
win.focus();
//MainMenuClick("CandidateInfo", id) <-- this function I want to call on the new Tab, after loading.
}
OpenInNewTab
正在“主页/索引”页面的新标签页中打开我的应用程序,这是正常的(任务的一半);
现在我想调用MainMenuClick
以在Index页面(在新标签页面)中打开特定的局部视图。
我不知道如何在新的打开标签中调用函数!
是否可以告诉浏览器在新标签中调用“MainMenuClick
”功能?
答案 0 :(得分:1)
您可以使用查询字符串来实现该目标,获取当前的部分视图ID,并将其传递给window.open
,如下所示:
var win = window.open("Index?partialViewId=" + partialViewId,"_blank");
在SPA全局脚本中,搜索该特定密钥的网址,如果存在,请使用您已获得的值调用MainMenuClick
。这意味着如果存在名为partialViewId的密钥,则加载页面时,脚本应该在页面加载后选择部分视图。
为了做到这一点,使用此函数从url获取任何键:
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
最后得到你的身份:
var partialViewId = getParameterByName('partialViewId');
if(partialViewId != null)
MainMenuClick("CandidateInfo", partialViewId);
希望有所帮助。
答案 1 :(得分:1)
我认为这是一个可行的解决方案,在您的情况下,它会在窗口打开后立即调用“MainMenuClick”。
function OpenInNewTab(id) {
var win = window.open("Index","_blank");
var myVar=setInterval(function(){myTimer(win,id)},1000);
}
function myTimer(win,id){
win.MainMenuClick("CandidateInfo", id);
win.focus();
}
请注意, MainMenuClick 函数会在一秒钟后调用;因为我们希望阻止javascript在未正确初始化的页面的上下文中进行调用。
对于其他不太经验的解决方案,您可以使用服务器端脚本来区分请求第一页与其他第二页的请求,使用一些POST或GET变量;并使用新页面正文的 onload 事件来执行您想要的任何代码。
您可能也对此处发布的答案感兴趣 - &gt; Javascript communication between browser tabs/windows