【问题标题】:Is there a way to find the window of the previous page (other tab)?有没有办法找到上一页的窗口(其他选项卡)?
【发布时间】:2014-07-27 19:35:37
【问题描述】:

如果您在新选项卡中打开链接(但是,使用 MMB 或右键单击或首选方法),是否有办法从新选项卡 window 找到打开器 window?这些不起作用:

  • window.opener
  • window.parent

也许这是不可能的,因为点击链接通常会“覆盖”窗口,所以没有参考是可能的,但是因为我们有标签......也许......一个参考是可能的?

我想让打开的窗口对原窗口做一个postMessage,让它知道页面已经加载,所以原窗口可以更新链接样式。

我不制作这些页面,因此我无权访问后端或 HTML 打印。 Think Greasemonkey:我将 JS 添加到现有网站以改进它们。

【问题讨论】:

    标签: javascript window postmessage


    【解决方案1】:

    我唯一能想到的就是拦截点击事件,抓取 URL,并将其传递给 window.open 和随后的 postMessage 对返回的窗口对象的调用。您是否使用这些链接生成页面?

    在某些浏览器中,window.open(url,'_blank') 将在选项卡中打开。

    【讨论】:

    • 新页面必须postMessage 到旧页面,而不是相反。抓取 URL 有什么帮助..?这些页面不是我的,而是 Youtube 或 Stackoverflow 等。(A la oilmonkey。)我可以在拦截点击时检测到“在新标签中打开”吗?我不想总是做window.open,除非我想要一个新标签。
    • 对不起,我的回答有点胡言乱语,我已经澄清了,但根据您的评论,这听起来像是不行。如果您不控制目标页面,那么您希望如何调用postMessage
    • 是的,open 可能是唯一的方法 =( 但是我需要一种确定的方法来检测点击是否会在新标签页中打开链接。正常的左键点击不应该这样做open.
    • 顺便说一句,这就是我所做的。工作正常。谢谢。
    【解决方案2】:

    我认为您的问题有两种解决方案

    第一个解决方案:Cookies

    一个简单的方法是在每次点击链接时使用当前页面的值设置一个cookie,您可以使用library like this one设置一个cookie,并在您点击后在下一页获取它

    $("a").click( function () {  
        $.setCookie("currentPage",document.URL);
    });
    

    在下一页你会得到这样的cookie

    if($.getCookie("currentPage") != undefined )
       var previousPage = $.getCookie("currentPage");
    

    第二种解决方案:服务器端语言

    如果你使用像php这样的服务器端语言,很容易得到上一页的url:

    <?php
        if (isset($_SERVER['HTTP_REFERER']))
          echo "<script> var previousPage='" . $_SERVER['HTTP_REFERER'] . "'; </script>";
    ?>
    

    最后,要发布消息,您只需要测试是否设置了 previousPage 变量:

    if(previousPage != undefined)
    {
       // Code to post your message
    }
    

    【讨论】:

    • 我如何处理previousPage?我不在乎网址。我需要它的window 对象向它发送消息。至少我们中的一个人不明白。
    • @Rudie 您是否拥有要获取其窗口对象的页面??
    • 没有。两个页面都在同一个域中。 Greasemonkey 风格,所以我正在扩展现有的网站,如 Youtube 和 Stackoverflow 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2023-03-28
    • 2021-09-06
    • 2018-07-31
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多