0

我正在使用 Dojo 1.8 - dijit.Dialog 从我的应用程序中打开一个对话框。在 Dialog 窗口中有一个图标来显示帮助。如果单击此帮助,它将打开一个新窗口(使用 window.open)并显示帮助文本。

该代码适用于 Firefox,但不适用于 IE(IE 8、9、10 的所有版本)。帮助窗口始终位于父窗口的后面。Alt+Tab 也没有将帮助窗口置于前面。(当您在其他屏幕上时,Alt+Tab 会显示帮助窗口)。

如果直接在没有对话框的页面中调用该函数,那么它也可以在 IE 中使用。如果我使用 dojo 1.6,那么代码可以在 IE 中运行。问题只在dojo 1.8

我在帮助窗口中使用了自动对焦到错误,重新对焦到错误和 window.focus。但没有任何帮助。对此的帮助或指示将不胜感激。谢谢

注意:应用程序在Xpage上,所以你可以忽略一些标签。问题与Dojo有关

代码是这样的。有3页。第一个页面包含 2 个 Javascrip 函数和一个打开对话框的链接。第二个页面是一个对话框,其中包含一个使用 window.open 打开帮助页面的链接。第三页只是帮助的文本。

第 1 页

<a onclick="javascript:modalwindojo('Dijit Dialog','FirstDialog.xsp','dialog1')" href="#">modalwindow</a>

第 2页 - 对话框页面

<a href="javascript:openHelp('FirstHelp.xsp');" id="link2">Help</a>

第 3 页- 帮助页面 仅包含 onloadevent 的文本<script>window.focus();</script>

JavaScript 函数

<script>
function openHelp(helpUrl){  

    windowHelpObjectReference = window.open(helpUrl,   
            "Help", "resizable=yes,scrollbars=no,status=yes,width=700,height=500");   
    windowHelpObjectReference.focus(); 

} 
dojo.require("dijit.Dialog");
function modalwindojo(dtitle, link, dialogId)
{
   var dlg = dijit.byId(dialogId);
   if (!dlg) { 
    dlg = new dijit.Dialog({
    title : dtitle,
        href : link,
        autofocus :false ,
        refocus : false 

        }, dojo.byId(dialogId));
  }

 // dlg.startup();
  dlg.show();

}

</script>
4

1 回答 1

0

使用 Dijit 面板而不是窗口。打开一个窗口是有风险的:一个弹出窗口阻止程序可能会阻止它,如果一个窗口已经以相同的名称打开,它不会进入前台。如果您使用选项卡,则用户不知道哪个弹出窗口属于哪个选项卡。浏览器配置可能会强制在选项卡中打开弹出窗口。

简而言之:您最好使用面板。

于 2013-07-23T10:59:44.393 回答