在Android中實現javascript編程
運行如圖:


示例是插入排序的例子。
主要的思路就是在webview中將編輯后的代碼保存為一個html文件中,再用另一個WebView來加載。
直接上代碼。
首先在manifest文件中添加幾個權限:
<!-- 鏈接互聯網權限 -->
<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"/> 布局文件:
<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:
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();
}
}在asset/web中添加index.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>打完收工。
來自:http://blog.csdn.net/qp120291570/article/details/8621473
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!