【问题标题】:Xpage window.focus() not workingXpage window.focus()不工作
【发布时间】:2015-12-19 05:07:30
【问题描述】:

我有一个 Xpage,它会在点击时打开弹出窗口,例如,我创建了 2 个按钮,即“popUp_form_clientSide”和“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.焦点()),

它经常聚焦窗口,但并非总是如此,相比之下,客户端按钮效果很好。

我不知道我在这里做错了什么,或者如果已经打开,有没有其他好的方法可以专注于窗口。

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

【问题讨论】:

    标签: window focus xpages xpages-ssjs


    【解决方案1】:

    阿吉特, 坚持使用 JavaScript 的客户端版本。您可以在客户端脚本标签中使用 #{...} 注入服务器端值。

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

    • 弹出窗口拦截器可能会阻止它
    • 当您单击主窗口时,弹出窗口会被隐藏,并且在获得焦点时可能不会弹出
    • 在移动设备上很烂

    替代方案:

    • ExtLib 对话框控件
    • 根据按钮动态显示对话框内容

    【讨论】:

    • 是的。我实际上知道使用 #{...} ,但不仅是组件值,我还需要视图中的文档计数以及文档 ID,这就是选择服务器端脚本的原因。蚂蚁想法何现在这样做??
    • Ajit:对于数据部分,我使用了在打开对话框时调用的 REST 服务。它可以用 SSJS 或 JAVA 构建,调用起来相对简单。
    • 短版:不要。长版:将您需要的 ssjs 作为 json 字符串计算到范围变量中,并将其插入到客户端脚本中。将客户端交互置于休息调用的中间绝不是一个好主意。并且不要使用弹出窗口
    猜你喜欢
    • 2010-10-30
    • 2014-03-29
    • 2011-02-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多