在android中實現javascript編程

來源:互聯網
上載者:User

運行         樣本是插入排序的例子。    主要的思路就是在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> 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.