監聽 Flex 頁面的後退/前進/刷新/關閉

我們知道 Flex 做的 web 頁面在整個程序中只有一個 url, 當我們按了 IE 上的後退/前進/刷新/關閉時就會退出到第一次 load 時的頁面,重新加載過。

在網上搜過很多,利用Javascript並不能實現屏蔽 IE 的後退/前進/刷新/關閉各功能。
在朋友介紹的一個網站[url]https://www.photoshop.com[/url]當你登錄後就會監聽IE 的後退/前進/刷新/關閉各功能,提示是否要執行。看了這個網站的原代碼,再在網上搜了一下,終於發覺他是怎樣實現的(原文:[url]http://flexblog.faratasystems.com/?m=20061217[/url])。

通過javascript 的 onbeforeunload 和 onunload 事件與 ActionScript 的addCallback方法 (如下邊的“getUnsavedDataWarning();”方法)來實現監聽:

1. 在 index.template.html 中增加javascript
[code]
<script language=”JavaScript” type=”text/javascript”>
//-------------------------------------------------------------------------------------------
// Specifies a function for the window's onbeforeunload event
// Call back to the getUnsavedDataWarning in our Flex app when the browser is about to unload
//-------------------------------------------------------------------------------------------
//window.onbeforeunload = function()

window.onbeforeunload = onbeforeunload_handler;
function onbeforeunload_handler()
{
var warning="";
var fxControl = document.${application} || window.${application};
if ( fxControl )
if ( typeof fxControl.getUnsavedDataWarning=="function")
warning = fxControl.getUnsavedDataWarning(); // This calls a function in our Flex app

if ( warning != '' )
return warning;
else
return void(0);
}


//-------------------------------------------------------------------------------------------
// Specifies a function for the window's onunload event
// Call back to the javascriptOnUnload in our Flex app when the browser unloads
//-------------------------------------------------------------------------------------------
window.onunload = function()
{
var fxControl = document.${application} || window.${application};
if ( fxControl )
if ( typeof fxControl.javascriptOnUnload=="function")
fxControl.javascriptOnUnload(); // This calls a function in our Flex app
}
</script>

[/code]

2.在 Flex 的 application 頁面里加增一個addCallback, 在頁面加載完後就addCallback:
[code]
private const UNSAVED_DATA_WARNING:String = 'You have unsaved changes. You will lose them if you continue.';

private function onCreationComplete():void {
ExternalInterface.addCallback("getUnsavedDataWarning",
function():String {
return UNSAVED_DATA_WARNING;
}
);
}
[/code]

這樣就可以防止 Flex 頁面的意外後退/前進/刷新/關閉了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章