| Adobe AIR |
|
|
从网页安装和运行 AIR 应用程序使用无缝安装功能,可以将 SWF 文件嵌入到网页中,这样用户便可以从浏览器中安装 AIR 应用程序。如果未安装运行时,无缝安装功能将安装运行时。使用无缝安装功能,用户无需将 AIR 文件保存到其计算机,即可安装 AIR 应用程序。Flex SDK 中包含一个 badge.swf 文件,通过此文件,您可以轻松使用无缝安装功能。有关详细信息,请参阅使用 badge.swf 文件安装 AIR 应用程序。 关于自定义无缝安装 badge.swf除了使用 SDK 随附的 badge.swf 文件,您还可以创建自己的 SWF 文件以供在浏览器页面中使用。自定义的 SWF 文件可以通过以下方式与运行时进行交互:
所有这些功能都是通过在承载于 adobe.com 上的 SWF 文件 air.swf 中调用 API 提供的。本节说明如何使用和自定义 badge.swf 文件,以及如何从您自己的 SWF 文件中调用 air.swf API。 另外,在浏览器中运行的 SWF 文件可以通过使用 LocalConnection 类与正在运行的 AIR 应用程序通信。有关详细信息,请参阅应用程序间的通信。 重要说明: 本节中所述的功能(以及 air.swf 文件中的 API)要求最终用户在 Web 浏览器中安装了 Adobe® Flash® Player 9 的更新 3。您可以编写代码来检查已安装的 Flash Player 版本,如果未安装所需的 Flash Player 版本,可以为用户提供替代界面。例如,如果安装的是 Flash Player 的旧版本,您可以提供下载 AIR 文件版本的链接(而不是使用 badge.swf 文件或 air.swf API 来安装应用程序)。
使用 badge.swf 文件安装 AIR 应用程序Flex SDK 中包含一个 badge.swf 文件,通过此文件,您可以轻松使用无缝安装功能。badge.swf 可以从网页中的链接安装运行时和 AIR 应用程序。为您提供了 badge.swf 文件及其源代码以供您在您的网站上分发。 AIR SDK 中包含一个 badge.swf 文件,通过此文件,您可以轻松使用无缝安装功能。badge.swf 可以从网页中的链接安装运行时和 AIR 应用程序。为您提供了 badge.swf 文件及其源代码以供您在您的网站上分发。 AIR SDK 中包含一个 badge.swf 文件,通过此文件,您可以轻松使用无缝安装功能。badge.swf 可以从网页中的链接安装运行时和 AIR 应用程序。为您提供了 badge.swf 文件及其源代码以供您在您的网站上分发。 本节中的说明介绍了如何设置 Adobe 所提供的 badge.swf 文件的参数。我们还提供了 badge.swf 文件的源代码,您可以对其进行自定义。 在网页中嵌入 badge.swf 文件
您也可以编辑和重新编译 badge.swf 文件。有关详细信息,请参阅修改 badge.swf 文件。 从网页中的无缝安装链接安装 AIR 应用程序将无缝安装链接添加到页面中后,用户即可通过在 SWF 文件中单击此链接来安装 AIR 应用程序。
修改 badge.swf 文件Flex SDK 提供了 badge.swf 文件的源文件。这些文件包含在 SDK 的 src 文件夹中:
您可以使用 Flash CS3 重新设计 badge.fla 文件的可视界面。 AIRBadge() 构造函数在 AIRBadge 类中定义,用于加载承载于 http://airdownload.adobe.com/air/browserapi/air.swf 上的 air.swf 文件。air.swf 文件包含用于使用无缝安装功能的代码。 成功加载 air.swf 文件时,会调用 onInit() 方法(在 AIRBadge 类中): private function onInit(e:Event):void {
_air = e.target.content;
switch (_air.getStatus()) {
case "installed" :
root.statusMessage.text = "";
break;
case "available" :
if (_appName && _appName.length > 0) {
root.statusMessage.htmlText = "<p align='center'><font color='#"
+ _messageColor + "'>In order to run " + _appName +
", this installer will also set up Adobe® AIR™.</font></p>";
} else {
root.statusMessage.htmlText = "<p align='center'><font color='#"
+ _messageColor + "'>In order to run this application, "
+ "this installer will also set up Adobe® AIR™.</font></p>";
}
break;
case "unavailable" :
root.statusMessage.htmlText = "<p align='center'><font color='#"
+ _messageColor
+ "'>Adobe® AIR™ is not available for your system.</font></p>";
root.buttonBg_mc.enabled = false;
break;
}
}
此代码将全局 _air 变量设置为所加载的 air.swf 文件的主类。此类包括以下公共方法,badge.swf 文件通过访问这些方法来调用无缝安装功能:
url 和 runtimeVersion 的设置通过容器 HTML 页中的 FlashVars 设置传入 SWF 文件。 如果应用程序在安装后自动启动,您可以使用 LocalConnection 通信让已安装的应用程序在调用时与 badge.swf 文件联系。有关详细信息,请参阅应用程序间的通信。 您也可以调用 air.swf 文件的 getApplicationVersion() 方法来检查是否已安装应用程序。可以在开始应用程序安装过程之前调用此方法,亦可在安装开始之后进行调用。有关详细信息,请参阅从网页检查是否已安装 AIR 应用程序。 加载 air.swf 文件您可以创建自己的 SWF 文件,使之使用 air.swf 文件中的 API 从浏览器中的网页与运行时和 AIR 应用程序交互。air.swf 文件承载于 http://airdownload.adobe.com/air/browserapi/air.swf。若要从 SWF 文件中引用 air.swf API,请将 air.swf 文件加载到 SWF 文件所在的应用程序域中。下面的代码显示了将 air.swf 文件加载到执行加载的 SWF 文件所在的应用程序域中的示例: var airSWF:Object; // This is the reference to the main class of air.swf
var airSWFLoader:Loader = new Loader(); // Used to load the SWF
var loaderContext:LoaderContext = new LoaderContext();
// Used to set the application domain
loaderContext.applicationDomain = ApplicationDomain.currentDomain;
airSWFLoader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
airSWFLoader.load(new URLRequest("http://airdownload.adobe.com/browserapi/air.swf"),
loaderContext);
function onInit(e:Event):void
{
airSWF = e.target.content;
}
一旦加载了 air.swf 文件(Loader 对象的 contentLoaderInfo 对象调度 init 事件时),您就可以调用任何 air.swf API。以下几节中介绍了这些 API: 注: Flex SDK 附带的 badge.swf 文件会自动加载 air.swf 文件。请参阅使用 badge.swf 文件安装 AIR 应用程序。本节中的说明适用于创建您自己的加载 air.swf 文件的 SWF 文件。
检查是否已安装运行时SWF 文件可以通过在从 http://airdownload.adobe.com/air/browserapi/air.swf 加载的 air.swf 文件中调用 getStatus() 方法,检查是否已安装运行时。有关详细信息,请参阅加载 air.swf 文件。 加载 air.swf 文件后,SWF 文件便可以调用 air.swf 文件的 getStatus() 方法,如下所示: var status:String = airSWF.getStatus(); getStatus() 方法会根据计算机上运行时的状态,返回下列字符串值之一:
如果浏览器中未安装所需的 Flash Player 版本(版本 9 升级 3),则 getStatus() 方法会引发错误。 从网页检查是否已安装 AIR 应用程序SWF 文件可以通过在从 http://airdownload.adobe.com/air/browserapi/air.swf 加载的 air.swf 文件中调用 getApplicationVersion() 方法,检查是否已安装 AIR 应用程序(具有匹配的应用程序 ID 和发行商 ID)。有关详细信息,请参阅加载 air.swf 文件。 加载 air.swf 文件后,SWF 文件便可以调用 air.swf 文件的 getApplicationVersion() 方法,如下所示: var appID:String = "com.example.air.myTestApplication";
var pubID:String = "02D88EEED35F84C264A183921344EEA353A629FD.1";
airSWF.getApplicationVersion(appID, pubID, versionDetectCallback);
function versionDetectCallback(version:String):void
{
if (version == null)
{
trace("Not installed.");
// Take appropriate actions. For instance, present the user with
// an option to install the application.
}
else
{
trace("Version", version, "installed.");
// Take appropriate actions. For instance, enable the
// user interface to launch the application.
}
}
getApplicationVersion() 方法的参数如下:
如果浏览器中未安装所需的 Flash Player 版本(版本 9 升级 3),则 getApplicationVersion() 方法会引发错误。 从浏览器安装 AIR 应用程序SWF 文件可以通过在从 http://airdownload.adobe.com/air/browserapi/air.swf 加载的 air.swf 文件中调用 installApplication() 方法,安装 AIR 应用程序。有关详细信息,请参阅加载 air.swf 文件。 加载 air.swf 文件后,SWF 文件便可以调用 air.swf 文件的 installApplication() 方法,如下面的代码中所示: var url:String = "http://www.example.com/myApplication.air"; var runtimeVersion:String = "1.0"; var arguments:Array = ["launchFromBrowser"]; // Optional airSWF.installApplication(url, runtimeVersion, arguments); installApplication() 方法用于在用户的计算机上安装指定的应用程序。此方法具有以下参数:
仅当在用户事件(例如鼠标单击)的事件处理函数中调用 installApplication() 方法时,此方法才能执行。 如果浏览器中未安装所需的 Flash Player 版本(版本 9 升级 3),则 installApplication() 方法会引发错误。 在 Mac 操作系统中,若要安装某一应用程序的更新版本,用户必须拥有足够的系统权限才能将新版本安装到应用程序目录中(如果此应用程序更新运行时,则还须拥有管理权限)。在 Windows 中,用户必须具有管理权限。 您也可以调用 air.swf 文件的 getApplicationVersion() 方法来检查是否已安装应用程序。可以在开始应用程序安装过程之前调用此方法,亦可在安装开始之后进行调用。有关详细信息,请参阅从网页检查是否已安装 AIR 应用程序。此应用程序运行后便可以通过使用 LocalConnection 类与浏览器中的 SWF 内容通信。有关详细信息,请参阅应用程序间的通信。 从浏览器启动安装的 AIR 应用程序若要使用浏览器调用功能(使其可以从浏览器启动),目标应用程序的应用程序描述符文件必须包含以下设置: <allowBrowserInvocation>true</allowBrowserInvocation> 有关应用程序描述符文件的详细信息,请参阅设置 AIR 应用程序属性。 浏览器中的 SWF 文件可以通过在从 http://airdownload.adobe.com/air/browserapi/air.swf 加载的 air.swf 文件中调用 launchApplication() 方法,启动 AIR 应用程序。有关详细信息,请参阅加载 air.swf 文件。 加载 air.swf 文件后,SWF 文件便可以调用 air.swf 文件的 launchApplication() 方法,如下面的代码所示: var appID:String = "com.example.air.myTestApplication"; var pubID:String = "02D88EEED35F84C264A183921344EEA353A629FD.1"; var arguments:Array = ["launchFromBrowser"]; // Optional airSWF.launchApplication(appID, pubID, arguments); launchApplication() 方法在 air.swf 文件(在用户界面 SWF 文件所在的应用程序域中加载)的顶级定义。调用此方法将导致 AIR 启动指定的应用程序(如果该应用程序已安装,且通过应用程序描述符文件中的 allowBrowserInvocation 设置允许浏览器调用)。此方法具有以下参数:
仅当在用户事件(例如鼠标单击)的事件处理函数中调用 launchApplication() 方法时,此方法才能执行。 如果浏览器中未安装所需的 Flash Player 版本(版本 9 升级 3),则 launchApplication() 方法会引发错误。 如果在应用程序描述符文件中将 allowBrowserInvocation 元素设置为 false,则调用 launchApplication() 方法将不起任何作用。 在显示用于启动应用程序的用户界面之前,您可能需要在 air.swf 文件中调用 getApplicationVersion() 方法。有关详细信息,请参阅从网页检查是否已安装 AIR 应用程序。 当通过浏览器调用功能调用此应用程序时,此应用程序的 NativeApplication 对象将调度 BrowserInvokeEvent 对象。有关详细信息,请参阅浏览器调用。 如果您使用浏览器调用功能,一定要考虑安全隐患(在浏览器调用中介绍)。 此应用程序运行后便可以通过使用 LocalConnection 类与浏览器中的 SWF 内容通信。有关详细信息,请参阅应用程序间的通信。 |