Air中读取JavaScript的方法
2015-08-06 14:14
531 查看
最近项目中用到了Air读取JS文件的需求,研究了一下,给大家分享下。
Air中提供HTMLLoader 类,可以读取Html文件中的js方法,当你把Html载入进来的时候,就可以通过HTMLLoader获取js文件中提供的属性以及方法,
具体操作如下。
写AS文件
再写一个HTML文件放置在aeests目录下,文件中可以只含也可以包含JS代码
运行结果:
当我尝试把test.html修改名称为test.js或者其它扩展名,就无法实现
想读取js内方法,只能支持扩展名为Html吗?
近日研究发现,其实也可以跳过Html,使用HtmlLoader.window.eval(),可以直接运行JS脚本
方法如下
JS文件为
运行结果
html我们是抛弃了,那么接下来,又遇到一个棘手的问题,一旦js文件有错误,那么我们在AS里能不能侦听到然后停掉js运行呢,
经过多次试验,在As中添加try catch,根本侦听不到js中的错误,只能在js中添加try catch,切记切记
因为在AS中无法侦听到js中的Crash,所以,我添加了一个trace,可以侦听到js中输出的内容,方便调试
AS代码如下
JS文件变为
运行结果
这样,就解决了在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
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
相关文章推荐
- [Javascript] 函数参数讨论
- JS封装的几个位操作函数和16进制操作函数
- JS判断,今天所在季度,第几周, 季度的第几周,年度第几周
- 编写良好javascript,css,html的方法技巧(持续更新……)
- 使用js处理图片效
- 30天了解30种技术系列---(1)现代web应用服务器-Express.js
- Extjs radiogroup 获取选中
- 整理 Anglarjs的service,directve的基本用法
- Extjs textfield 宽
- js运动基础
- javaScript对Cookie的添加,获取,删除等操作
- JS 导出网页中Table内容到excel
- javascript实现鼠标放上后下边对应内容变换的效果
- JAVASCRIPT——文字出现效果练习
- ajax无刷新上传(使用ajaxfileupload.js)
- webservice 实现json模式
- js 常用方法
- js 请求URL 追加参数
- JavaScript 之 SeaJS 学习
- [Javascript] 对象的创建与类的封装