• 在QtScript中问候一下Envjs


    在QtScript中问候一下Envjs

    Posted by 齐亮 on 2011/03/10

    原文链接:Kent Hansen – Say Hello to Envjs for QtScript

    在我的在QtScript中伪造一个网页浏览器博文发表之后,一些朋友提到了Envjs。这里引用Envjs网站的一句话:

    Envjs是用一个JavaScript写成的模拟浏览器环境。

    胜于伪造,Envjs真正地实现了这些API,所以它们可以工作。 这非常酷!我刚刚把它跑在QtScript之上,这里是两个晚上工作的结果:

    http://qt.gitorious.org/qt-labs/qtscript-browser-env

    README中提供了适当的细节;简短地说,您可以调试运行Envjs实现(env.js),调用一个函数注册本地的Envjs/QtScript处理器(例如网络和文件访问、异步函数执行以及一些其它事情),以及presto——实时浏览器环境。

    一些简单的实例

    例如代码仓库中的examples/document.js

    document.write("<p>Hello, JavaScript in QtScript!</p>");
    document.close();
    console.log("p tag's innerHTML:", document.getElementsByTagName("p").item(0).innerHTML);
    console.log("document.innerHTML:", document.innerHTML);
    

    输出:

    document:   HTMLDocument
    p tag's innerHTML:   Hello, JavaScript in QtScript!
    document.innerHTML:   <html><head/><body><p>Hello, JavaScript in QtScript!</p></body></html>
    

    而且,prototype.js也工作正常:

    var my_div = document.createElement('div');
    my_div.addClassName('prototyped').hide();
    document.body.appendChild(my_div);
    console.log("document.innerHTML:", document.innerHTML);
    

    输出:

    document.innerHTML:   <html><head/><body><div class="prototyped"/></body></html>
    

    (不太幸运的是,jQuery 1.5.1失败,结果是Result of expression 'ajaxLocParts' [null] is not an object。)

    已知局限

    我实在没有太多的时间去尝试,但发现了一个局限是XMLHttpRequest的responseXML不能工作,所以您最好使用JSON(对于responseText和JSON.parse())。responseXML不能工作的原因是Envjs DOM解析器使用了E4X,它是一个现在仅被Mozilla的JS引擎所支持的语言扩展。(请按您自己的意愿对和JavaScriptCore以及V8有关的建议进行投票,尽管我对此不报期望。)

    QML集成?

    目前还什么都没有,但是一个深度集成将是非常棒的(没有外部依赖,只是在您的QML/JavaScript中使用这个浏览器环境)。注意QML已经有一个XMLHttpRequest的实现了,并且实现了一个DOM API的子集(用于responseXML),但仅仅如此——一个子集。并且它并不是我们想继续开发的API——但是如果能有一个支持富JS的集成,也很好。也许Envjs是一个方案。

    开销?

    嗯,Envjs 1.2版的大小是680KB(没有缩小的),所以调试运行它并不是没有代价的。这是另外一个要考虑的因素。在V8中,可以把Envjs注入到标准环境中并且把它串行化,希望这样可以大量减少初始化时间。

    欢迎贡献

    本项目对于合并请求(merge request)是开放的。目前并不是所有的本地集成都实现了,并且XMLHttpRequest的实现可以被改进。另外还有一些XML解析问题(也许可以使用其它现存的轻型解析器替代现在所依赖的E4X?)。

    祝快乐!

    Related posts:

    1. 在QtScript中伪造一个网页浏览器
    2. Qter,我们的JavaScript平台正在如火如荼地进行
  • 相关阅读:
    python中常见的部分错误
    不同类型指针自加所移动位置分析
    c语言,sizeof关键字,数组和指针区别
    数组名和指针能够等价的情况
    typedef与define宏定义用于声明新的类型之间的区别
    老问题了,函数返回指向常字符串的指针,形如 char *func()
    c语言运算符优先级 ., *, (), []
    const char**与char**类型的区别
    char *f[]与char (*f)[]的区别
    标准IO库函数sprintf
  • 原文地址:https://www.cnblogs.com/lexus/p/2428782.html
Copyright © 2020-2023  润新知