您的位置:首页 > Web前端 > JavaScript

Air中读取JavaScript的方法

2015-08-06 14:14 531 查看
最近项目中用到了Air读取JS文件的需求,研究了一下,给大家分享下。

Air中提供HTMLLoader 类,可以读取Html文件中的js方法,当你把Html载入进来的时候,就可以通过HTMLLoader获取js文件中提供的属性以及方法,

具体操作如下。

写AS文件

private var html:HTMLLoader = new HTMLLoader();
private var urlReq:URLRequest = new URLRequest("assets/test.html");
private function startLoadJS():void
{
  html.addEventListener(Event.COMPLETE, loadComplete);
  html.load(urlReq);
}
private function loadComplete(e:Event):void{
  trace(html.window.bbq);
  trace(html.window.transToDB("一条弯弯的河"));
}


再写一个HTML文件放置在aeests目录下,文件中可以只含也可以包含JS代码

<script>
var bbq = "O,THANK YOU"
function transToDB(str){
return "哥哥面前"+str;
}
</script>


运行结果:

“O,THANK YOU“
"哥哥面前一条弯弯的河”


当我尝试把test.html修改名称为test.js或者其它扩展名,就无法实现

想读取js内方法,只能支持扩展名为Html吗?

近日研究发现,其实也可以跳过Html,使用HtmlLoader.window.eval(),可以直接运行JS脚本

方法如下

private var htmlLoader:HTMLLoader=new HTMLLoader();
private var jsUrl:URLRequest = new URLRequest("assets/test.js");
private function evalFunction():void
{
var jsLoader:URLLoader = new URLLoader();
jsLoader.addEventListener(Event.COMPLETE,jsLoadComplete);
jsLoader.dataFormat=URLLoaderDataFormat.TEXT;
jsLoader.load(jsUrl);
}
private function jsLoadComplete(e:Event):void
{
var jsStr:String = e.currentTarget.data as String;
htmlLoader.window.eval(jsStr);
jsClass = new htmlLoader.window.test();
trace(jsClass.run())
}


JS文件为

var test = (function () {
function test() {
}
test.prototype.run = function () {
return "test.js中的run函数";
};
return test;
})();


运行结果

test.js中的run函数


html我们是抛弃了,那么接下来,又遇到一个棘手的问题,一旦js文件有错误,那么我们在AS里能不能侦听到然后停掉js运行呢,

经过多次试验,在As中添加try catch,根本侦听不到js中的错误,只能在js中添加try catch,切记切记

因为在AS中无法侦听到js中的Crash,所以,我添加了一个trace,可以侦听到js中输出的内容,方便调试

AS代码如下

htmlLoader.window.Console={};
htmlLoader.window.Console.log = function(message:*):void
{
trace("AS中ConsoleLog:"+message);
}


JS文件变为

var test = (function () {
function test() {
}
test.prototype.run = function () {
Console.log("JS中的ConsoleLog");
return "test.js中的run函数";
};
return test;
})();


运行结果

AS中ConsoleLog:JS中的ConsoleLog
test.js中的run函数


这样,就解决了在AS中调试JS的方法。

再补充一点,虽然AS停不了js的执行,但是可以用HtmlLoader的HTMLUncaughtScriptExceptionEvent.UNCAUGHT_SCRIPT_EXCEPTION事件侦听到js中报的错误。你也仅限于可以侦听到,并不能打断JS的运行。

关于AS读取JS的官方解释:

在桌面计算机上(在桌面和扩展的桌面配置文件中),HTMLLoader 类使用内部 AIR WebKit 引擎。

其可用的功能和呈现外观与 StageWebView 类相同,并且在 ActionScript 和 javascript 之间实现了紧密集成和脚本桥接。

由于 StageWebView 类使用 Flash Player 插件提供的系统 web 控件,因此强烈建议不要同时使用 StageWebView 和 HTMLLoader 实例,否则会发生未定义的行为,从而可能使应用程序终止运行。

GitHub地址:https://github.com/yuxinliang/AirLoadJS
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: