我想从我的Flash项目中打开外部URL。我通常使用这样的东西:
getURL("javascript:newwin=window.open('http://someurl.com','','');");
但是,如果Javascript不可用(如果SWF未嵌入HTML中),那么这将失败。如何检测Javascript是否可用?如果它不可用,我可能只是使用getURL并给它直接的URL,虽然我只想这样做,如果使用Javascript方法是不可能的。谢谢!
答案 0 :(得分:5)
要完成您所描述的内容,最好的方法是让Flash调用名为“pingJavaScript”的JavaScript函数。如果JavaScript正在运行,那么该JavaScript函数将调用名为“receiveJSNotification”的Flash影片上的函数。所以在你的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;
}
答案 1 :(得分:3)
我发现实际上有一种更容易实现的方法:
public function isThereJavaScript():Boolean{
return Boolean(ExternalInterface.call("window.location.href.toString"));
}
这不需要JavaScript后端。它只是一贯的工作。如果能够调用JavaScript,则意味着必须有一个window属性,该属性将具有非null的location.href。 ExternalInterface也可用于AS2和AS3。