禁用TextFields中的超链接以打开Web浏览器

时间:2014-11-30 12:45:45

标签: actionscript-3 flash hyperlink textfield

在Flash中,我有一个带有"event:" prefix超链接的TextField。这会触发链接点击事件,我在其中阅读事件ID代码并相应地做出响应。

问题是每次点击链接时,Web浏览器都会打开并显示相同的链接。如何禁用Web浏览器?

2 个答案:

答案 0 :(得分:2)

TL; DR版本:

无论是在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' );
    }

}