2009-02-12 19 views
0

我想从我的Flash项目中打开外部URL。我通常使用这样的事:从Actionscript检测Javascript的可用性?

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

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

回答

3

我觉得牛逼实际上有一个更容易实现的方法:

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

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

5

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

要启用Flash影片和JavaScript之间的可靠的通信,这包括在动作脚本的影片的第一帧上的顶部:

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; 
} 
+0

有趣的方法。这使事情变得复杂,但如果这是最好的方法,我可以采用它。这将在ActionScript 2中工作吗?谢谢! – DivideByHero 2009-02-12 16:40:06