仅当窗口尚不存在时 JavaScript window.open

2024-01-11

我有一个应用程序,单击链接后会打开一个新窗口。这会生成一个包含 Java 小程序的页面。我遇到的问题是,单击同一链接会重新加载页面,从而重置 Java 应用程序。有什么办法可以捕获这个吗?可以接受的两种解决方案是:

  1. 允许从单击处理程序打开多个窗口
  2. 如果窗口已打开,则忽略后续请求

作为一个 Javascript 新手,我深表歉意 - 这并不是我的主要工作。

附加到处理程序的代码是

function launchApplication(l_url, l_windowName)
{
  var l_width = screen.availWidth;
  var l_height = screen.availHeight;

  var l_params = 'status=1' +
                 ',resizable=1' +
                 ',scrollbars=1' +
                 ',width=' + l_width +
                 ',height=' + l_height +
                 ',left=0' +
                 ',top=0';

  winRef = window.open(l_url, l_windowName, l_params);
  winRef.moveTo(0,0);
  winRef.resizeTo(l_width, l_height);
}

EDIT:

感谢您的回复 - 我稍微修改了建议,以便我可以通过该功能打开多个 URL。

编辑2: 此代码还有另一个版本,位于检查在另一个窗口上打开的 URL https://stackoverflow.com/questions/528941/how-can-i-check-for-an-open-url-in-another-window

var g_urlarray = [];

Array.prototype.has = function(value) {
    var i;
    for (var i in this) {
        if (i === value) {
            return true;
        }
    }
    return false;
};


function launchApplication(l_url, l_windowName)
{
  var l_width = screen.availWidth;
  var l_height = screen.availHeight;
  var winRef;

  var l_params = 'status=1' +
                 ',resizable=1' +
                 ',scrollbars=1' +
                 ',width=' + l_width +
                 ',height=' + l_height +
                 ',left=0' +
         ',top=0';
  if (g_urlarray.has(l_url)) {
    winRef = g_urlarray[l_url];
  }
  alert(winRef);
  if (winRef == null || winRef.closed) {
      winRef = window.open(l_url, l_windowName, l_params);
      winRef.moveTo(0,0);
      winRef.resizeTo(l_width, l_height);
      g_urlarray[l_url] = winRef;
  }
}

我会这样做 - 基本上将所有引用的打开的窗口存储在函数本身上。当函数触发时,检查窗口是否不存在或已关闭 - 因此,启动弹出窗口。否则,请关注该请求的现有弹出窗口。

function launchApplication(l_url, l_windowName)
{
  if ( typeof launchApplication.winRefs == 'undefined' )
  {
    launchApplication.winRefs = {};
  }
  if ( typeof launchApplication.winRefs[l_windowName] == 'undefined' || launchApplication.winRefs[l_windowName].closed )
  {
    var l_width = screen.availWidth;
    var l_height = screen.availHeight;

    var l_params = 'status=1' +
                   ',resizable=1' +
                   ',scrollbars=1' +
                   ',width=' + l_width +
                   ',height=' + l_height +
                   ',left=0' +
                   ',top=0';

    launchApplication.winRefs[l_windowName] = window.open(l_url, l_windowName, l_params);
    launchApplication.winRefs[l_windowName].moveTo(0,0);
    launchApplication.winRefs[l_windowName].resizeTo(l_width, l_height);
  } else {
    launchApplication.winRefs[l_windowName].focus()
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅当窗口尚不存在时 JavaScript window.open 的相关文章

随机推荐

  • commitAllowingStateLoss() 和 commit() 片段

    我想在网络后台操作后提交一个片段 我在成功的网络操作后调用 commit 但如果活动进入暂停或停止状态 它就会导致应用程序崩溃 并显示 IllegalState 异常 所以我尝试使用 commitAllowingStateLoss 并且它现
  • 将 SWIG 与采用 std::string 作为参数的方法结合使用

    我使用 SWIG 来包装我的 C 类 有些方法有一个const std string 作为参数 SWIG 创建一个名为的类型SWIGTYPE p std string但是 在 C 中调用该方法时 不能仅为此传递普通字符串 下面的示例只是 S
  • 如何将数据附加到 JTA 事务? (或唯一标识它)

    我有一个 getStockQuote 函数 它将从股票市场获取某个符号的当前股票报价 我的目标是在 JTA 事务中 第一次调用 getStockQuote 将获取股票报价 但同一事务中的所有后续调用将重用相同的股票报价 例如 它不会尝试获取
  • 检查javascript中多维数组中的键是否存在

    希望是一个简单的问题 为什么要检查多维数组中是否存在键 a new Array Array a 0 0 1 a 0 1 2 if a 1 2 undefined alert sorry that key doesn t exist else
  • assembleDebug.dependsOn 不起作用

    首先 这不是这个的重复 错误 在项目 app 上找不到属性 assembleDebug https stackoverflow com q 38547400 770467 问题 自从更新到Android Studio 2 2 gradle插
  • 在 SQL Server 中编写架构脚本

    我想在 SQL Server 数据库中创建一个架构 数据库中还有一堆其他脚本 我可以编写现有架构的脚本吗 我的意思是 假设我们有一张桌子 我们可以 编写一个脚本CREATE TABLE脚本 我们可以编写一个创建架构的脚本吗 谢谢你们的期待
  • 良好的Java进程控制库[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Java 进程控制是出了名的糟糕 主要是由于 Java VM JDK 类 例如 java lang P
  • 在 bash 脚本中使用 find 命令

    我刚刚开始使用 bash 脚本 并且需要对多种文件类型使用 find 命令 list find home user Desktop name pdf 此代码适用于 pdf 类型 但我想同时搜索多种文件类型 例如 txt 或 bmp 您有什么
  • 在无效 Syskeypress 上禁用 MessageBeep

    简单的问题 如果用户按 Alt Whatever 并且没有与之关联的热键 通常程序会产生 MessageBeep 我可以调用哪些 API 函数来避免这种情况 处理 WM KEYDOWN WM KEYUP WM SYSKEYDOWN 和 WM
  • Symfony2 和 Angular。用户认证

    我正在开发一个涉及 Symfony2 和 AngularJs 的 Web 应用程序 我对网站中用户身份验证的正确方法有疑问 我在 API REST 在 Symfony 中内置 中构建了一个函数 该函数通过请求中传递的参数对用户进行身份验证
  • 如何使用jQuery调用c# webservice获取返回值

    我想使用 jQuery 调用名为 c ashx 的 C Web 服务 该服务检查该用户名是否有效并以字符串形式返回错误消息 如果 c webservice 的返回值是字符串值 我应该为 data 和 content type 添加什么 jQ
  • OSX NSUserDefaults 不工作

    这段代码在我的应用程序中总是给我 否 它确实可以在我复制它的任何其他项目中工作 所以我的 standardUserDefaults 一定搞砸了 但我绝对不知道这是如何发生的以及如何解决它 NSUserDefaults defaults NS
  • org.openqa.selenium.WebDriverException:尚未定义命令或响应编解码器。无法继续

    我正在使用 appium 来自动化移动应用程序 但是当我尝试在应用程序上执行某些操作 即单击登录按钮 时 在模拟器或移动设备上启动应用程序后 会发生上述异常 有人知道它出了什么问题吗 gt 错误截图 https i stack imgur
  • 当一个方法被多次调用时,@RequestParam变量返回一组逗号分隔的值

    我刚刚注意到 当连续多次调用控制器方法时 用于检查 POST 参数 例如用户名或 id 的 RequestParam 变量的行为相当奇怪 它不返回当前参数值 例如 Jason Michael John 而是返回之前调用该方法所用的所有参数值
  • 禁用时省略 editText 的内容

    我有一个布局 其中 EditText 由用户填充 然后它被禁用以充当标准 TextView 问题是 椭圆形永远不适用于此 EditText 我希望它在文本太大而无法完全显示时在文本末尾显示 但我找不到任何方法让它起作用 而且我不知道为什么它
  • Cassandra 和非结构化数据

    我对 NoSQL 还比较陌生 但我已经对关系数据库进行了相当多的尝试 我们正在评估 Cassandra 在数据模型可能需要相当积极地发展的环境中的使用情况 我看到它在多个地方写到 Cassandra 可以存储 结构化 半结构化和非结构化 数
  • 两个黑莓模拟器之间的短信

    如何编写程序以使用 BlackBerry JDE 在两个 BlackBerry 模拟器之间发送和接收 SMS 您需要使用以下参数从命令行启动模拟器 sms source port uint sms destination port uint
  • iOS:UIBezierPath 和 CAShapeLayer fillRule

    我都用过UIBezierPath and CAShapeLayer前 但几乎每次都会结合用内部颜色填充路径中包含的对象 但我想这次填充包含的对象外部的颜色UIBezierPath 我刚刚编写并运行了以下简单的代码 试图让自己熟悉fillRu
  • 哈希值和加盐值

    我正在开发一个小型网络应用程序 可以在内部对用户进行身份验证 一旦用户通过身份验证 我的 Web 应用程序就会将一些信息 例如用户 ID 和人员姓名 传递给第三方 Web 应用程序 第三方开发人员建议我们对这些值进行哈希和加盐 原谅我的无知
  • 仅当窗口尚不存在时 JavaScript window.open

    我有一个应用程序 单击链接后会打开一个新窗口 这会生成一个包含 Java 小程序的页面 我遇到的问题是 单击同一链接会重新加载页面 从而重置 Java 应用程序 有什么办法可以捕获这个吗 可以接受的两种解决方案是 允许从单击处理程序打开多个