2014-04-28 198 views
0

我正在維護一個內部開發的XPages項目,並且有一個奇怪的問題。如果用戶從「主頁」頁面開始並向下鑽取到特定記錄(即在單獨的瀏覽器選項卡中打開的記錄ID「9H4G7J」),然後開始更改,然後決定退出而不保存,方法是單擊「退出」按鈕的提示狀態 - 「你確定要離開這個頁面嗎?此文檔可能包含未保存的更改「 - 並且當用戶單擊」好「時,」記錄「選項卡關閉,用戶使用先前的瀏覽器選項卡顯示,並將記錄的位置向下鑽取到類別中。這是好事,這是我們想要的。XPages關閉瀏覽器

BUT,如果用戶,而不是向下鑽取,進入在「主頁」屏幕上的搜索設備的記錄ID「9H4G7J」,然後開始的變化,並且點擊退出,相同的提示上面概述示但是當用戶點擊確定時,會顯示第二個提示 - 「您正在查看的網頁正試圖關閉此窗口。你想關閉這個窗口嗎?「 - 如果用戶點擊」是「,瀏覽器將完全關閉!任何人都可以解釋爲什麼這會有不同的表現嗎?

這裏是Java代碼;

private UIComponent createEventHandler(FacesContext context, 
    UIComponent parent, PageExpressionEvaluator evaluator) { 
     XspEventHandler result = new XspEventHandler(); 
     result.setSubmit(false); 
     result.setEvent("onclick"); 
     MethodBinding script = evaluator.createMethodBinding(result, 
     "if (XSP._isDirty()){\n if (confirm (\"Are you sure you want to navigate 
     away from this page?\" + \"\\n\" + \"\\n\" +\n \"This document may contain 
     unsaved changes.\" + \"\\n\" + \"\\n\" +\n \"Press OK to continue, or 
     Cancel to stay on the current page.\")){\n  window.close();\n }else 
     {\n  return false;\n }\n} else {\n window.close();\n}", 
      null,null, null); 
      result.setScript(script); 
      return result; 
     } 

這裏是XPage的「編輯」按鈕源代碼;

<xp:button value="Exit" id="button2"> 
    <xp:eventHandler event="onclick" submit="false"> 
    <xp:this.script><![CDATA[if (XSP._isDirty()){ 
     if (confirm ("Are you sure you want to navigate away from this page?" + "\n" 
     + "\n" + "This document may contain unsaved changes." + "\n" + "\n" + 
     "Press OK to continue, or Cancel to stay on the current page.")){ 
      window.close(); 
      }else{ 
      return false; 
      } 
     } else { 
     window.close(); 
     }]]></xp:this.script> 
    </xp:eventHandler></xp:button> 

在此先感謝

+0

等等!再次檢查了這一點,其中一個區別是,當搜索一個記錄ID然後單擊該記錄打開它時 - 這次它不會打開一個新的選項卡,而是記錄顯示在同一個瀏覽器選項卡中。 – AJF

回答

1

當應用程序打開一個新標籤或新窗口的JavaScript調用window.close();關閉該選項卡或窗口。如果您在最後一個窗口打開時關閉,則瀏覽器關閉。要查看效果:打開一個打開新頁面的其他選項卡(dilbert.com是個不錯的選擇)並查看效果。

爲了使應用程序行爲是一致的修改代碼,要麼始終打開(TARGET = _blank)或從不打開一個新的標籤/窗口

如果我的應用程序打開新的標籤我個人討厭。如果我想要一個新標籤,我可以在點擊之前按住Ctrl鍵。但這是一個品味的問題,您的用戶可能會喜歡自動新標籤。只要讓它一致

+0

是的。感謝stwissel。我發現通過搜索打開記錄不會打開一個新的標籤,例如通過向下鑽取來查找記錄。我不打算讓這個記錄在新窗口中打開,它的最終用戶和其他人開發這個應用程序 - 我只是有維護它的任務。我現在試圖找出如何在新的標籤窗口中打開選定的記錄。 – AJF

+0

將一個屬性target =「_ blank」添加到顯示的鏈接。 – stwissel

+0

發現了我們想要的方式工作的XPage在調用window.open命令的JS文件中使用名爲tkDynamicViewPanelRowClick的Function。此外,XPage中工作的列不包含在dynamicViewPanel中,而是包含在普通的viewPanel中。 XPage我需要改變DOES使用動態視圖面板,我試圖模擬上述工作,但因爲沒有一致的列名稱,我無法讓它工作。 XPage更改HTML源代碼是說「href =」routetonotesdocument; action = editDocument「class =」xspLinkViewColumn「>」 - 如何讓鏈接打開一個新頁面? – AJF