標籤:pos manager int 對象 exception pre todo efault content
原創文章。轉載請註明。
閱讀本文之前,您須要對瀏覽器怎樣載入javascript有一定瞭解。
當然,對java與javascript本身也須要瞭解。
本文首先介紹瀏覽器載入並執行javascript的原理。
其次將介紹怎樣用java與javascript互調用對象。
最後介紹怎樣用java實現javascript的document對象與其他內建方法。
瀏覽器從server得到含有javascript代碼的html文本後,將順序運行javascript代碼塊。
看代碼是最簡單的方式:
package org.taoningyu.js;import java.io.IOException;import java.net.MalformedURLException;import java.net.URL;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;public class TaoDocument { Document mydoc = null;public TaoDocument(String url) throws MalformedURLException, IOException{mydoc = Jsoup.parse(new URL(url),30000);//利用Jsoup實現document樹} public Element getElementById(String id){//實現document的getElementById方法 System.out.println("Java println:\t"+mydoc.getElementById(id)); return mydoc.getElementById(id);//返回的是Element對象 }public static void main(String[] args) throws MalformedURLException, IOException { ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("javascript"); //初始化Java內建的javascript引擎 try { se.eval("function test() {" + "id='areaDefault'; print('js print:'+document.getElementById(id));return document.getElementById(id);}"); //測試用javascript自己定義函數,功能為輸出id為areaDefault的元素,並返回。 Invocable invocableEngine = (Invocable) se;//轉換引擎類型為Invocable se.put("document", new TaoDocument("http://www.ifeng.com/")); //關聯對象,這一步非常重要,關聯javascript的document對象為TaoDocument。亦即我自己實現的document對象 Element callbackvalue=(Element) invocableEngine.invokeFunction("test"); //直接執行函數。傳回值為Element System.out.println("callback return :"+callbackvalue); //列印輸出返回內容 se.eval("test()");//第二種調用函數方式,我更偏愛此種方式} catch (ScriptException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} }}
通過實現document對象,就能夠動態解析html頁面了。
在另外的文章。我將介紹怎樣結合httpclient,使其成為headless瀏覽器的雛形。
用JAVA編寫瀏覽器核心之實現javascript的document對象與內建方法