0

我想从我的 Flash 项目中打开外部 URL。我通常使用这样的东西:

getURL("javascript:newwin=window.open('http://someurl.com','','');");

但是,如果 Javascript 不可用(在 SWF 未嵌入 HTML 的情况下),那么这将失败。如何检测 Javascript 是否可用?如果它不可用,我可能只是使用 getURL 并给它直接 URL,尽管我只想在无法使用 Javascript 方法的情况下这样做。谢谢!

4

2 回答 2

5

要完成您所描述的,最好的方法是让 Flash 调用一个名为“pingJavaScript”的 JavaScript 函数。如果 JavaScript 正在运行,那么该 JavaScript 函数将调用 Flash 电影上的一个名为“receiveJSNotification”的函数。因此,在您的 Flash 电影中,如果调用了该方法,您就知道 JS 正在运行。

要在 Flash 电影和 JavaScript 之间实现可靠的通信,请在电影第一帧的 Actionscript 顶部包含以下内容:

import flash.external.ExternalInterface;
import flash.events.Event;

添加一个函数以从 JavaScript 接收“是的,我还活着”:

var js_available = false;

function receiveJSNotification(str:String):void {
 _root.js_available = true;
}

ExternalInterface.addCallback("notifyFlash", receiveJSNotification);
ExternalInterface.call("pingJavaScript", null);

在 JavaScript 中:

function pingJavaScript()
{
    var movie = getFlash();
    movie.notifyFlash();
}

function getFlash()
{
    var movie = null;
    if (navigator.appName.indexOf('Microsoft') != -1) {
        movie = window['flashmovie'];
    } else {
        movie = document['flashmovie'];
    }
    return movie;
}
于 2009-02-12T16:36:33.887 回答
3

我发现实际上有一种更简单的方法可以做到这一点:

public function isThereJavaScript():Boolean{
    return Boolean(ExternalInterface.call("window.location.href.toString"));
}

这不需要 JavaScript 后端。它只是始终如一地工作。如果有调用 JavaScript 的能力,那就意味着必须有一个 window 属性,它有一个非空的 location.href。ExternalInterface 也可用于 AS2 和 AS3。

于 2009-02-18T15:43:21.597 回答