首页 > 代码库 > 用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件

用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件

第九篇,仿URLLoader读取文件

先看看最后的代码

function readFile(){
    urlloader = new LURLLoader();
    urlloader.addEventListener(LEvent.COMPLETE,readFileOk);
    urlloader.load("../file/test.txt","text");
}
function readFileOk(){
    mytxt.text = urlloader.data;
}

基本上已经实现了Actionscript的模仿了。

效果和代码看这里,看不到效果的请下载支持HTML5的浏览器

http://fsanguo.comoj.com/html5/jstoas09/index.html

 

下面说说实现过程
其实JavaScript中的ActiveXObject是可以实现本地文件的读写的,但是你的浏览器的安全级别必须设定到最低,但是我们做的游戏和网页是要放到网上的,我们没有办法要求所有的用户这样做。

在这里,我用PHP来实现这一过程,php可以自由读取服务器上的文件,它并不依赖用户的浏览器的设定

用php读取文件很简单,一个fopen函数就可以搞定,下面是file.php的代码

if(!file_exists($_POST["file"])){
        echo "";
        exit;
    }
    $file = fopen($_POST["file"],"r");
    $filemsg = "";
    while (!feof($file)) {
        $line = fgets($file);
        $filemsg = $line;
    }
    fclose($file);
    echo $filemsg;

把这个php放到你喜欢的位置,然后在legend.js里面设定路径LEGEND_FILE_PHP指向你放的位置

 

关于javascript调用php,当然可以自己写,因为它并不算复杂,但是我是一个很懒的人,所以我直接用jQuery来调用了,jquery是什么?估计不用我解释了吧

关于LURLLoader的构造,和LLoader基本一样,只有load方法不一样,下面是LURLLoader类的完整代码,里面调用了之前准备的php来获取要读取的文本

function LURLLoader(){
    var self = this;
    self.objectindex = ++LGlobal.objectIndex;
    self.type="LURLLoader";
    self.loadtype = "";
    self.content = null;
    self.oncomplete = null;
    self.event = {};
}
LURLLoader.prototype = {
    addEventListener:function(type,listener){
        var self = this;
        if(type == LEvent.COMPLETE){
            self.oncomplete = listener;
        }
    },
    load:function (path,loadtype){
        var self = this;
        self.loadtype = loadtype;
        if(self.loadtype == "text"){
            $.post(LEGEND_FILE_PHP, {
                flg:"read",
                file:path
            },function(data){
                if(self.oncomplete){
                    self.event.currentTarget = data;
                    self.data = data;
                    self.oncomplete(self.event);
                }
            });
        }
    }
}

关于上面的例子,我加了一个按钮,一个LTextField,代码看下面

init(40,"mylegend",600,500,main);

var loadingLayer;
var backLayer;

var urlloader
var mytxt;
function main(){
    legendLoadOver();
    
    var readBtn = addButton("读取",20);
    readBtn.x = 10;
    readBtn.y = 20;
    addChild(readBtn);
    readBtn.addEventListener(LMouseEvent.MOUSE_DOWN, readFile);
    
    mytxt = new LTextField();
    mytxt.x = 10;
    mytxt.y = 50;
    mytxt.text = "";
    mytxt.width = 300;
    mytxt.height = 200;
    mytxt.setType(LTextFieldType.INPUT);
    addChild(mytxt);
}
function readFileOk(){
    mytxt.text = urlloader.data;
}
function readFile(){
    urlloader = new LURLLoader();
    urlloader.addEventListener(LEvent.COMPLETE,readFileOk);
    urlloader.load("../file/test.txt","text");
}
function addButton(lbl,x){
    var up = new LSprite();
    up.graphics.drawRect(1,"black",[0, 0, 80, 20],true,"#999999");
    var txt = new LTextField();
    txt.x = x;
    txt.text = lbl;
    up.addChild(txt);
    var over = new LSprite();
    over.graphics.drawRect(1,"black",[0, 0, 80, 20],true,"#cccccc");
    var txt1 = new LTextField();
    txt1.x = x;
    txt1.text = lbl;
    over.addChild(txt1);
    var btn = new LButton(up,over);
    return btn;
}

over,模仿ActionScript读取文本文件完成了

用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件