2009-02-12 56 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