以下代碼已知在三週前工作。在此期間,我們安裝了IE 7和一些安全補丁。最終的問題是,有誰知道如何恢復舊的行爲?使用JavaScript的奇怪的IE7行爲window.open()
方案
我們在網頁下面的JavaScript代碼1(姑且稱之爲foo.aspx),也就是點擊一個按鈕調用:
window.open("http://Foo/App2/bar.aspx, "_blank", "titlebar,status,width=650,height=600");
第二網絡頁面( bar.aspx)然後應該在foo.aspx之上打開。用戶做了一些事情,當他們點擊一個按鈕bar.aspx將bar.aspx中的一些值通過window.opener.document使用JavaScript寫回到foo.aspx的字段中,逐個尋址每個元素並修改其innerText。然後用戶關閉bar.aspx並在那裏放置foo.aspx,除了現在它在某些字段中有bar.aspx的值,並且用戶在使用foo.aspx的過程中愉快地出發了。這已經工作了兩年多了。
在過去的兩個星期,我們已經申請了一堆安全補丁,並升級到IE 7現在的行爲是這樣的:
如果我測試和簡單導航直接foo.aspx,然後點擊bar.aspx按鈕打開,然後突然焦點切換回foo.aspx並彈出一個對話框,顯示「您正在查看的網頁試圖關閉窗口,您是否想關閉此窗口?」如果我選擇「否」,然後foo.aspx保持活着,我不得不Alt-Tab返回到bar.aspx,並且之後,一切都像以前一樣工作。但是,這對用戶來說將是一個痛苦。注意:無處在foo.aspx中NOR bar.aspx是否有調用close()方法!!!所以我不明白爲什麼彈出窗口會顯示它說的內容。
如果我通過應用程序訪問foo.aspx,這意味着它已經以編程方式打開,而不是由用戶明確打開,那麼bar.aspx會打開,您可以看到foo.aspx在它後面消失(關閉)。然後bar.aspx得到JavaScript錯誤,因爲window.opener不再可用。
Secenario#1不是最優的,但至少會是一個有效的解決辦法(如果有些的用戶培訓問題,培養他們打「否」,然後按Alt-Tab鍵,其中沒有這之前發生了什麼。方案2是在極端的非最佳,因爲bar.aspx的整個目的是寫這些值回foo.aspx。
其他注意事項
現在我們已經安裝了IE 7和後續的Active Dir ectory策略發生變化時,即使在IE 6上也會發生上述行爲。
foo.aspx和bar.aspx都運行在Web服務器上,同一網站上,但在不同的虛擬目錄中。這些內部應用程序只能通過經過認證的用戶從我們的網絡內部訪問。
將服務器放在Intranet區域(通常位於此處)或受信任的站點中沒有區別。我看不到任何區域或高級設置中的設置適用於此行爲,Intranet和可信站點區域在其策略中設置爲非常自由,尤其是在腳本行爲方面。
我可以在bar.aspx及其客戶端腳本中進行任何更改,但僅限於能夠更改foo.aspx中的按鈕單擊JavaScript代碼(該頁面由供應商提供,而bar.aspx是內部開發的)。
我重申,除了通過window.opener.document進行更新之外,foo.aspx並沒有被bar.aspx所觸及,當然也沒有試圖在其上調用close()。
所以,問題仍然是在IE 7中,或者更有可能在安全補丁中,會打破這個?我們有一家姊妹店,在IE 7上運行相同的代碼,他們沒有報告過這個問題。所以它似乎必須是環保的東西,現在我一直認爲它必須是一個可以應用的補丁。我會採取知識產權文章,IE設置,註冊表黑客,JavaScript更改或任何其他來解決這個問題。
感謝您的任何和所有的建議。