在 Flex/Flash 中,滑鼠放在已啟用 HTML 功能之文字欄位中的超連結上,并不能像在瀏覽器的 status bar 看到其超連結的信息,我們無法判斷點下去之后跳轉的是否為一個值得信任和安全的網站,Flex/Flash 內的超連結安全問題由此而生,如何跟用戶良好的交互又是另外一個棘手的問題,下面是我的一個比較典型的解決方案。

獲取網址
目前為止,滑鼠放在 Flex/Flash 內的已啟用 HTML 功能之文字欄位中不會產生相應的事件,而按一下之后,會產生 flash.events.TextEvent.LINK 的事件,並且其中的 URL 是以 “event:” 開始時,便會傳送。 URL 在「event:」之後的其餘部分將會放置在 LINK 事件的文字屬性中。因此,可以在 TextEvent.LINK 上下功夫,值得注意的是,如果超連接不使用”event:”開頭,我們是無法獲取其中的URL的。

content.textArea.addEventListener(TextEvent.LINK, linkHandler);

建立信任網址列表
建立一個值得信任的網站列表,可以是一個 Array 或者一個 XML,一般值得信任的列表就應該是自己的網站。不過例子中我加了 Adobe,XD。

private var trustSites:Array = [{label: "RichMedia+", data: 'richmediaplus.com'},
								{label: "Adobe", data: 'adobe.com'}];

測試獲取的網址
測試獲取的網址是否在信任網址中,可以通過 URLUtil.getServerName(url:String):String 的方式可以獲取服務器名稱,然后通過正則表達式測試是否屬于信任網址。

private function isTrustWebSites(site:String):Boolean
{
	var lgh:int = trustSites.length;
	for(var i:int = 0; i < lgh; i++)
	{
		var regStr:String = trustSites[i].data + "$"
		var reg:RegExp = new RegExp(regStr, "i")
		if(reg.test(URLUtil.getServerName(site)))
			return true;
	}
	return false;
}

對不信任網址進行相關提示
對于屬于信任列表內的網站進行直接跳轉,而對于不屬于信任列表里面的網址將進行提示進行跳轉,申明“此網頁不屬于 RichMedia+ 網站,RichMedia+ 不保證其安全性”。用戶信任可以繼續選擇跳轉,不信任則可以關閉對話框。如果合適的話,更加可以添加『以后不再提示』的對話框,方便用戶選擇。

private var ui:HtmlTooltip = new HtmlTooltip();
private function linkHandler(event:TextEvent):void
{
	if(isTrustWebSites(event.text))
	{
		navigateToURL(new URLRequest(event.text), "_blank");
	}
	else
	{
		ui.setFocus();
		PopUpManager.addPopUp(ui, this, true);
		ui.url = event.text;
		PopUpManager.centerPopUp(ui);
	}
}

SourceView:http://code.richmediaplus.com/TextCompHtmlLink/srcview/index.html

This movie requires Flash Player 9