Javascript子父浏览器选项卡通信

时间:2016-11-23 16:17:08

标签: javascript jquery html cookies

我正在建立一个站点(孩子),显示有关该地区所有车辆的详细信息。该区域有一个id(Rid)和车辆(Vid)。

在父选项卡中,用户选择一个区域并单击打开带有所选Rid的子选项卡的按钮(通过cookie发送)。

<a class="btn btn-default btn-xs" href="/TStatus" target="_blank">

在子选项卡中,用户可以更改区域以查看其他信息,当他点击车辆名称时,区域ID应通过cookie发送回父选项卡。

function ToParentTab(id) {
   var childHref = window.location.host;
   var parentwindow = myOpenWindow(window.location.protocol + "//" + childHref + "/main", ParentPage", "", window.location.protocol + "//" + childHref + "/main");
}

function myOpenWindow(winURL, winName, winFeatures, winObj) {
   var theWin;
   if (winObj != null) {
       if (!winObj.closed) {
           setCookie("teksid", regionId, 365);
           window.opener.parent.focus();
       }
   }
   setCookie("teksid", regionId, 365);
   theWin = window.open(winURL, winName, winFeatures);
   return theWin;
}

是否有一种方法可以在从子选项卡点击车辆时关注父页面(如果再次关闭打开它)并调用一个函数,该功能将根据收到的cookie刷新内容而不再加载整个网页?

1 个答案:

答案 0 :(得分:0)

您可以使用javascript完成所有这些操作。我不会使用cookie在Windows之间进行通信。只需直接调用方法,或将参数放在查询字符串中。

但是你会遇到一些问题。当文档在子窗口中加载时,父窗口不会自动得到通知,并且子窗口中的错误不会自动冒泡到父窗口。为了解决这些问题,我喜欢使用promises。 This sample显示了如何解决您的问题。注意...

  • 父母和孩子之间的无缝沟通。父级通过调用GO()函数加载子级,该函数返回对加载页面的引用,因此父级可以直接移动到子级上的调用函数。
  • 对孩子网址的双重调用。我们用ajax调用它一次,以确保它在那里,并希望将它放在浏览器缓存中,然后第二次使用window.location()。如果您想这样做,请确保您的页面不会完全失败缓存。
  • 子页面有一个返回Promise的start()函数。这很好地处理了子页面中的用户操作是异步的,并且可能生成错误。当用户在子页面中完成后,请根据用户的选择解决该承诺。
  • 错误冒泡到父级。