如何在新标签中打开我的应用程序后调用Java脚本功能?

时间:2016-06-12 10:05:45

标签: javascript jquery asp.net-mvc

我有一种单页面应用程序,在一种情况下,我需要在第二个选项卡中打开我的应用程序,第二个选项卡必须打开并显示特定的局部视图。

我有这个功能在新标签页中打开应用程序:

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”功能?

2 个答案:

答案 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