我想从我的 Flash 项目中打开外部 URL。我通常使用这样的东西:
getURL("javascript:newwin=window.open('http://someurl.com','','');");
但是,如果 Javascript 不可用(在 SWF 未嵌入 HTML 的情况下),那么这将失败。如何检测 Javascript 是否可用?如果它不可用,我可能只是使用 getURL 并给它直接 URL,尽管我只想在无法使用 Javascript 方法的情况下这样做。谢谢!
我想从我的 Flash 项目中打开外部 URL。我通常使用这样的东西:
getURL("javascript:newwin=window.open('http://someurl.com','','');");
但是,如果 Javascript 不可用(在 SWF 未嵌入 HTML 的情况下),那么这将失败。如何检测 Javascript 是否可用?如果它不可用,我可能只是使用 getURL 并给它直接 URL,尽管我只想在无法使用 Javascript 方法的情况下这样做。谢谢!
要完成您所描述的,最好的方法是让 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;
}
我发现实际上有一种更简单的方法可以做到这一点:
public function isThereJavaScript():Boolean{
return Boolean(ExternalInterface.call("window.location.href.toString"));
}
这不需要 JavaScript 后端。它只是始终如一地工作。如果有调用 JavaScript 的能力,那就意味着必须有一个 window 属性,它有一个非空的 location.href。ExternalInterface 也可用于 AS2 和 AS3。