Xpage window.focus() not working



我有一个Xpage,它可以在单击时打开弹出窗口,例如,我创建了两个按钮,即"popUp_form_clientSide"one_answers"popUp-form_serverSide"

popUp_form_clientSide在客户端具有调用"doPopup()"函数的事件。popUp_form_serverSide在view.postScript("doPopup()"); 的帮助下从服务器端调用相同的函数

doPopup()是在脚本的客户端加载的。

Xpage代码:

 <xp:button value="popUp_form_clientSide" id="button4">
    <xp:eventHandler event="onclick" submit="false">
        <xp:this.script><![CDATA[var link ="http://google.com";
        doPopup(link);]]>
       </xp:this.script>
    </xp:eventHandler>
 </xp:button>

<xp:button value="popUp_form_serverSide" id="button3">
    <xp:eventHandler event="onclick" submit="true"
    refreshMode="partial" refreshId="button4">
    <xp:this.action><![CDATA[#{javascript:var link ="xx_openConfigPageN.xsp?docName=K1&pageName=K1&action=newDocument"
view.postScript("doPopup('"+link+"');")}]]>
    </xp:this.action>
   </xp:eventHandler>
</xp:button>

javaScript doPopup()代码:

var popupWindow = null;
var  doPopup = function (link)
{
  if (popupWindow && !popupWindow.closed)
    {
      popupWindow.focus();
     alert("In focus")
    }
  else
    {
     popupWindow = window.open(link,"New",
        "width=200,height=200");
    alert("New");
    }
  };

现在,如果我点击客户端按钮,它会正常工作,例如,它会打开带有传递的变量链接的弹出窗口,如果我再次点击,它会检查是否已经打开并聚焦窗口,而不是打开新窗口。所以这是完美的,

但当我点击服务器端按钮时,它会正常打开弹出窗口,这是完美的,当我再次点击它时,它进入if条件,提醒"聚焦"消息,但不会将窗口放在前面(window.focus()),

它经常聚焦窗口,但并不总是如此,在Contrast中,客户端按钮工作得很完美。

我不知道我在这里做错了什么,或者有没有其他好的方法可以集中注意力在已经打开的窗户上。

我想让它在服务器端工作,因为链接变量包含了大量来自数据库和条件的内容,所以我选择了serverSide来做这件事。

Ajit,坚持使用JavaScript的客户端版本。您可以在客户端脚本标记中使用#{…}注入服务器端值。

你可能想重新审视你的弹出式方法,你一定会创建一个支持噩梦:

  • 弹出窗口阻止程序可能会阻止它
  • 当你点击主窗口时,弹出窗口会被隐藏,聚焦时可能不会弹出
  • 在移动设备上很糟糕

备选方案:

  • ExtLib对话框控件
  • 基于按钮动态显示对话框内容

最新更新