運行 樣本是插入排序的例子。 主要的思路就是在webview中將編輯後的代碼儲存為一個html檔案中,再用另一個WebView來載入。 直接上代碼。 首先在manifest檔案中添加幾個許可權: [plain] <!-- 連結互連網許可權 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 在SDCard中建立與刪除檔案許可權 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard寫入資料許可權 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 連結互連網許可權 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 在SDCard中建立與刪除檔案許可權 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <!-- 往SDCard寫入資料許可權 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 布局檔案: [html]<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <WebView android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <WebView android:id="@+id/swebView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone" /> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <WebView android:id="@+id/webView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <WebView android:id="@+id/swebView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone" /> </RelativeLayout>主activity: [java] package com.example.webtest1; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.apache.http.util.EncodingUtils; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.webkit.WebView; import android.widget.Toast; public class MainActivity extends Activity { private WebView mWebView; private WebView sWebView; private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.webView); sWebView=(WebView) findViewById(R.id.swebView); sWebView.getSettings().setJavaScriptEnabled(true); mHandler=new Handler(); // 得到WebSettings對象,設定支援JavaScript參數 // 如果訪問的頁面中有JavaScript,則WebView必須設定支援JavaScript ,否則顯示空白頁面 mWebView.getSettings().setJavaScriptEnabled(true); sWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setBuiltInZoomControls(true); // 載入URL mWebView.loadUrl("file:///android_asset/web/index.html"); //sWebView.loadUrl("file:///android_asset/result.html"); final class JSInterface{ public void clickOnAndroid(final String jsCode) { mHandler.post(new Runnable() { public void run() { //Toast.makeText(MainActivity.this, "測試調用java"+s, Toast.LENGTH_LONG).show(); mWebView.setVisibility(8); String html=""; html += "<head>"; html += "<body>"+"<script>"+jsCode+"</script>"+"</body>"; html += "</head>"; try { saveToSDCard("result.html",html); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Toast.makeText(MainActivity.this,html, Toast.LENGTH_LONG).show(); sWebView.setVisibility(0); sWebView.loadUrl("file:///mnt/sdcard/result.html"); } }); } } mWebView.addJavascriptInterface(new JSInterface(), "demo"); } @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(0,1,1,"back"); getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { // TODO Auto-generated method stub if(item.getItemId()==1) { mWebView.setVisibility(0); sWebView.setVisibility(8); } return super.onMenuItemSelected(featureId, item); } //寫資料到SD中的檔案 public void saveToSDCard(String filename, String content) throws Exception { //通過getExternalStorageDirectory方法擷取SDCard的檔案路徑 File file = new File(Environment.getExternalStorageDirectory(), filename); //擷取輸出資料流 FileOutputStream outStream = new FileOutputStream(file); outStream.write(content.getBytes()); outStream.close(); } } package com.example.webtest1; import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream; import org.apache.http.util.EncodingUtils; import android.os.Bundle;import android.os.Environment;import android.os.Handler;import android.app.Activity;import android.view.Menu;import android.view.MenuItem;import android.webkit.WebView;import android.widget.Toast; public class MainActivity extends Activity {private WebView mWebView;private WebView sWebView;private Handler mHandler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWebView = (WebView) findViewById(R.id.webView);sWebView=(WebView) findViewById(R.id.swebView);sWebView.getSettings().setJavaScriptEnabled(true); mHandler=new Handler();// 得到WebSettings對象,設定支援JavaScript參數 // 如果訪問的頁面中有JavaScript,則WebView必須設定支援JavaScript ,否則顯示空白頁面 mWebView.getSettings().setJavaScriptEnabled(true); sWebView.getSettings().setJavaScriptEnabled(true);mWebView.getSettings().setBuiltInZoomControls(true); // 載入URL mWebView.loadUrl("file:///android_asset/web/index.html");//sWebView.loadUrl("file:///android_asset/result.html");final class JSInterface{public void clickOnAndroid(final String jsCode) { mHandler.post(new Runnable() {public void run() { //Toast.makeText(MainActivity.this, "測試調用java"+s, Toast.LENGTH_LONG).show();mWebView.setVisibility(8);String html=""; html += "<head>"; html += "<body>"+"<script>"+jsCode+"</script>"+"</body>"; html += "</head>"; try {saveToSDCard("result.html",html);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} Toast.makeText(MainActivity.this,html, Toast.LENGTH_LONG).show(); sWebView.setVisibility(0);sWebView.loadUrl("file:///mnt/sdcard/result.html"); } }); } }mWebView.addJavascriptInterface(new JSInterface(), "demo");} @Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add(0,1,1,"back");getMenuInflater().inflate(R.menu.activity_main, menu);return true;}@Override public boolean onMenuItemSelected(int featureId, MenuItem item) { // TODO Auto-generated method stub if(item.getItemId()==1) {mWebView.setVisibility(0);sWebView.setVisibility(8);}return super.onMenuItemSelected(featureId, item); } //寫資料到SD中的檔案 public void saveToSDCard(String filename, String content) throws Exception { //通過getExternalStorageDirectory方法擷取SDCard的檔案路徑 File file = new File(Environment.getExternalStorageDirectory(), filename); //擷取輸出資料流 FileOutputStream outStream = new FileOutputStream(file); outStream.write(content.getBytes()); outStream.close(); } } 在asset/web中添加index.html [html] <html> <body> <h1>Js edit</h1> <form> <textarea id="code" name="code" cols="130" rows="15"> //InsertSort function InsertSort(arr) { var st = new Date(); var temp, j; for(var i=1; i<arr.length; i++) { if((arr[i]) < (arr[i-1])) { temp = arr[i]; j = i-1; do { arr[j+1] = arr[j]; j--; } while (j>-1 && (temp) < (arr[j])); arr[j+1] = temp; }//endif } status = (new Date() - st) + ' ms'; return arr; } var testArray=[3,324,5345,6546,134,5654,665]; document.write("<p>TestArray:</p>"); document.writeln(testArray.toString()); InsertSort(testArray); document.write("<p>After Sort:</p>"); document.writeln(testArray.toString()); </textarea> </form> <div id='b'><button onclick="window.demo.clickOnAndroid(document.getElementById('code').value)">Go!</button></div> </body> </html> <html><body><h1>Js edit</h1><form><textarea id="code" name="code" cols="130" rows="15">//InsertSortfunction InsertSort(arr) { var st = new Date(); var temp, j; for(var i=1; i<arr.length; i++) { if((arr[i]) < (arr[i-1])) { temp = arr[i]; j = i-1; do { arr[j+1] = arr[j]; j--; } while (j>-1 && (temp) < (arr[j])); arr[j+1] = temp; }//endif } status = (new Date() - st) + ' ms'; return arr; }var testArray=[3,324,5345,6546,134,5654,665]; document.write("<p>TestArray:</p>");document.writeln(testArray.toString());InsertSort(testArray);document.write("<p>After Sort:</p>");document.writeln(testArray.toString());</textarea></form><div id='b'><button onclick="window.demo.clickOnAndroid(document.getElementById('code').value)">Go!</button></div> </body></html>