【问题标题】:Opening only one instance of url using window.open使用 window.open 仅打开一个 url 实例
【发布时间】:2013-06-07 06:24:08
【问题描述】:

我正在处理一个带有超链接的 asp.net 网页。每当单击该超链接时,就会使用 javascript window.open 打开一个新的浏览器窗口。我希望如果用户多次单击此链接,则只打开一个窗口而不是多个窗口。我只想在用户多次单击该超链接时突出​​显示该窗口。我是否需要使用window.open 来检测是否在浏览器的任何其他选项卡中打开了 url?是否有为此内置的任何 jQuery 插件,以便我可以将其用于浏览器兼容性。

这是超链接网址:

<a onclick="addClick()" href="javascript:void(0)">
                    New</a>

这是我正在使用的代码:

function addClick() {
    var ID = jQuery("#ID").val();
    var PSSWD = jQuery("#PSSWD").val();
    var ACCID = jQuery("#ACCID").val();
    var PASSWDINT = jQuery("#PASSWDINT").val();

    window.open("LoginAPI?ID=" + encodeURIComponent(ID) + "&PSSWD=" + encodeURIComponent(PSSWD) + "&ACCID=" + encodeURIComponent(ACCID) + "&PASSWDINT=" + encodeURIComponent(PASSWDINT) + "", "LoginAPI");
}

请提出建议。

【问题讨论】:

  • 难道你不能只在按钮单击时调用 javascript 并在第一次单击它时设置一个变量吗?然后如果设置了变量,不要打开新窗口..
  • 您好,我想您可以使用window.showModalDialog 代替window.open
  • window.open你用的是什么代码
  • 我正在使用 window.open("LoginAPI?ID=" + encodeURIComponent(ID) + "&PSSWD=" + encodeURIComponent(PSSWD) + "&ACCID=" + encodeURIComponent(ACCID) + "&PASSWDINT= " + encodeURIComponent(PASSWDINT) + "", "LoginAPI");

标签: javascript jquery asp.net


【解决方案1】:

试试

window.open("<url>", "<window name>");

这应该始终在同一个窗口中打开。见reference

【讨论】:

  • 这将重新加载内容(这可能是也可能不是所需的行为)。
  • @DotnetSparrow:如果您对窗口名称参数使用相同的名称,则不会:jsbin.com/omider/1(来源:jsbin.com/omider/1/edit)。
  • 此代码适用于我在 Chrome、IE 和 FF 中:&lt;a href="#" onclick="window.open('http://localhost', 'myWin'); return false;"&gt;Open&lt;/a&gt;。不幸的是,IE 和 FF 不会激活窗口,但 Chrome 会。
【解决方案2】:

HTML:

<a href="http://www.someurl.com" onclick="openwindow.call(this); return false;">open window</a>

var wins = {};
function openwindow(){
    var url = this.href;
    if(typeof wins[url] === 'undefined' || wins[url].closed)
        wins[url] = window.open(url);
}

【讨论】:

  • +1 从链接中获取href会更好,所以链接是真实的,可以预取等等:&lt;a href="/the/real/link" onclick="openwindow(this.href); return false;"&gt;open window&lt;/a&gt;
  • 没有理由为此使用getAttribute。至少自 90 年代中期以来,href 一直是锚的反映属性。另请注意,您在函数中留下了 url 参数。
  • @karaxuna : url 不是 passrd 作为链接的参数。链接使用不带参数的函数 playapi()。这是在该函数中创建的网址:我正在使用 window.open("LoginAPI?ID=" + encodeURIComponent(ID) + "&PSSWD=" + encodeURIComponent(PSSWD) + "&ACCID=" + encodeURIComponent(ACCID) + " &PASSWDINT=" + encodeURIComponent(PASSWDINT) + "", "LoginAPI");
  • @DotnetSparrow:这些信息从一开始就应该在问题中。
  • @DotnetSparrow:查看更新后的问题,上面的答案仍然适用。所有这些变化都是您从中获取 URL 的位置。
【解决方案3】:
<script>


var windowObjectReference = null; // global variable

function openFFPromotionPopup() {
  if(windowObjectReference == null || windowObjectReference.closed)
  /* if the pointer to the window object in memory does not exist
     or if such pointer exists but the window was closed */

  {
    windowObjectReference = window.open("http://www.spreadfirefox.com/",
   "PromoteFirefoxWindowName", "resizable,scrollbars,status");
    /* then create it. The new window will be created and
       will be brought on top of any other window. */
  }
  else
  {
    windowObjectReference.focus();
    /* else the window reference must exist and the window
       is not closed; therefore, we can bring it back on top of any other
       window with the focus() method. There would be no need to re-create
       the window or to reload the referenced resource. */
  };
}
</script>
<a href="javascript:void(0);" onclick="openFFPromotionPopup()">click here</a>

查看参考https://developer.mozilla.org/en-US/docs/Web/API/window.open

【讨论】:

    【解决方案4】:

    要在 HTML 页面中仅打开一个弹出窗口实例,请使用 window.open methodwindowName 参数。
    例如

    window.open('http://www.abc.com') 
    

    每次用户单击包含 window.open 代码的链接时都会打开一个新窗口。
    相反,

    window.open('http://www.abc.com','abc') 
    

    无论用户点击链接多少次,都只会打开一个窗口实例。

    你也可以使用focus函数,如下所示

    <script language="javascript" type="text/javascript">
    <!--
    function popitup(url) {
        newwindow=window.open(url,'name','height=200,width=150');
        if (window.focus) {newwindow.focus()}
    
          if (!newwindow.closed) {newwindow.focus()}
        return false;
    }
    
    // -->
    </script>
    

    编辑 1

    <a onclick="return addClick()" href="javascript:void(0)">New</a>
    

    这是我正在使用的代码:

    function addClick() {
        var ID = jQuery("#ID").val();
        var PSSWD = jQuery("#PSSWD").val();
        var ACCID = jQuery("#ACCID").val();
        var PASSWDINT = jQuery("#PASSWDINT").val();
    
        window.open("LoginAPI?ID=" + encodeURIComponent(ID) + "&PSSWD=" + encodeURIComponent(PSSWD) + "&ACCID=" + encodeURIComponent(ACCID) + "&PASSWDINT=" + encodeURIComponent(PASSWDINT) + "", "LoginAPI");
        return false;
    }
    

    【讨论】:

    • @Shejhar:我正在使用窗口名称,但它仍然会打开新标签。我已经用代码更新了问题。
    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多