zoukankan      html  css  js  c++  java
  • Rhino and Envjs

    Rhino and Envjs

    Rhino is an open source implementation of JavaScript in Java and envjsis a simulated browser environment written in javascript. So what does all this mean? It means that you can load up a web page and execute the loaded page’s JavaScript in a browser simulated environment all without a browser! Let me demonstrate.

    From the Rhino downloads page I downloaded rhino1_7R2.zip since R3 doesn’t work with Envjs at the time of this post.

    I also downloaded the latest Envjs and placed it in the same location as the unzipped rhino folder.

    Navigate in a terminal to the location of the unziped rhino folder and start up rhino.

    java -jar js.jar

    Then you will want to load the Envjs JavaScript that will emulate the browser environment. (location is relative to where the jar file is running from)

    load("../env.rhino.js")

    Then I tell Envjs to load external scripts found in the page. This is required because scripts running in Rhino with Envjs will have file system access.

    Envjs.scriptTypes['text/javascript'] = true;

    Then we navigate our emulated browser to the test page that I built.

    window.location = "http://mikegrace.s3.amazonaws.com/geek-blog/rhino-envjs.html"

    The test page that I built looks like this when you load it in a browser with JavaScript disabled

    This is because the page content is built using jQuery

    Rhino and Envjs Test<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script><script charset="utf-8" type="text/javascript">// <![CDATA[
        $(document).ready(function() {
          $(document.body)
            .append("
     
    <h1>Header of the highest order</h1>
     
    ")
            .append("
     
    Question: What is the answer?
     
    ")
            .append("<code>42</code>");
        });
     
    // ]]></script>

    Because Envjs will emulate a browser, we will be able to work with the page in Rhino like we would in a browser.

    Getting the paragraph text is as easy as running some jQuery in the Rhino console

    jQuery("p").text();

    Awesome!

    rhino1_7R2 mgrace$ java -jar js.jar
    Rhino 1.7 release 2 2009 03 22
    js&gt; load("../env.rhino.js")
    [  Envjs/1.6 (Rhino; U; Mac OS X x86_64 10.6.8; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13  ]
    js&gt; Envjs.scriptTypes['text/javascript'] = true;
    true
    js&gt; window.location = "http://mikegrace.s3.amazonaws.com/geek-blog/rhino-envjs.html"
    http://mikegrace.s3.amazonaws.com/geek-blog/rhino-envjs.html
    js&gt; jQuery("p").text();
    Question: What is the answer?
    js&gt; jQuery("code").text();
    42

    If you are looking to debug your scripts in Rhino a bit better, you can launch the rhino console in the Rhino JavaScript Debugger using a command similar to this

    java -cp js.jar org.mozilla.javascript.tools.debugger.Main

    rhino javascript debugger

    MikeGrace: A 25 year old Geek that loves his wife and enjoys tech, photography, outdoors, and his motorcycle.

  • 相关阅读:
    BZOJ 2120 数颜色
    BZOJ 3289 Mato的文件管理
    BZOJ 2038 小Z的袜子
    BZOJ 1878 HH的项链
    洛谷P2709 小B的询问
    6491: Daydream
    问题 L: An Invisible Hand
    HDU-2177 取(2堆)石子游戏 (威佐夫博奕)
    (POJ-3279)Fliptile (dfs经典---也可以枚举)
    问题 J: Palindromic Password ( 2018组队训练赛第十五场) (简单模拟)
  • 原文地址:https://www.cnblogs.com/lexus/p/2428754.html
Copyright © 2011-2022 走看看