在Flash中,我有一个带有"event:" prefix超链接的TextField。这会触发链接点击事件,我在其中阅读事件ID代码并相应地做出响应。
问题是每次点击链接时,Web浏览器都会打开并显示相同的链接。如何禁用Web浏览器?
答案 0 :(得分:2)
无论是在Flash Player中还是在AIR中,Web浏览器将弹出打开的唯一原因是您忘记将event:
添加到锚点href的开头。
您无需使用event.preventDefault()
或event.stopPropagation()
来阻止网络浏览器打开。实际上,您根本不需要订阅TextEvent.LINK
事件。您需要做的就是确保添加event:
作为锚标记的前缀。
经过长时间调试后,我发现只有href负责才会发生以下任何一种情况:
行为1 - 您的href具有event:
前缀
TextEvent.LINK
活动,则会在用户点击该链接时触发该活动。如果没有,没有任何反应。TextEvent.LINK
事件添加到任何父级DisplayObject,例如父级Sprite,甚至是Stage。它不需要专门添加到相关的TextField中。 行为2 - 您的href没有event:
前缀
TextEvent.LINK
不会触发。因此,它不能用于阻止Web浏览器打开。target
属性打开/处理链接href。target
为_self
并且您已经在网络浏览器中(使用Flash Player),则会重复使用相同的窗口/标签来打开链接。如果您在AIR中,则会弹出带有链接的默认Web浏览器。 答案 1 :(得分:0)
尝试类似下面的内容。您可以使用Switch / Case语句区分链接,或者如果更容易,则只使用多个If / Else语句。
myTextField.addEventListener(TextEvent.LINK, linkClickHandler);
function linkClickHandler(evt:TextEvent):void
{
trace("## clicked text is: " + evt.text);
if (evt.text == "what_you_want")
{
var url_1 : String = "http://www.example_A.com/";
var request_1 : URLRequest = new URLRequest( url_1 );
navigateToURL( request_1, '_blank' );
}
if (evt.text == "something_else")
{
var url_2 : String = "http://www.example_B.com/";
var request_2 : URLRequest = new URLRequest( url_2 );
navigateToURL( request_2, '_blank' );
}
}