2015-08-26 43 views
0

我想在webview中加載html字符串,即不是從URL或sdcard中的某個html文件加載。現在,html字符串有文本區域。用戶可以編輯它。現在我想將更改保存爲內部存儲器中的html文件。我該怎麼做。我檢查了其他SO問題,都使用相同的方法,即使用URL或使用一些JavaScript方法,這在我的情況下不起作用。我試過how to get html content from a webview?但它沒有幫助我。我認爲這實際上打開彈出窗口顯示代碼,甚至不允許用戶編輯哪些不是我的情況。從Webview獲取html字符串並將其存儲爲html文件

代碼(這裏的文本區域被TinyMCE的編輯器提供):

try { 
     InputStream input = getApplicationContext().getAssets().open("sample.html"); 
     //Reader is = new BufferedReader(new InputStreamReader(input, "windows-1252")); 

     StringBuilder contentBuilder = new StringBuilder(); 
     try { 
      BufferedReader in = new BufferedReader(new InputStreamReader(input, "windows-1252")); 
      String str; 
      while ((str = in.readLine()) != null) { 
       contentBuilder.append(str); 
      } 
      in.close(); 
     } catch (IOException e) { 
     } 
     content = contentBuilder.toString(); 

     content=content.replace("This is some content that will be editable with TinyMCE.", html); 

     view.getSettings().setJavaScriptEnabled(true); 
     view.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
     view.getSettings().setPluginState(WebSettings.PluginState.ON); 
     view.addJavascriptInterface(new WebAppInterface(this), "Android"); 

     view.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer"); 



     view.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       view.loadUrl("javascript:window.HtmlViewer.showHTML" + 
         "('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); 
      } 
     }); 


     view.loadDataWithBaseURL("file:///android_asset/", content, "text/html", 
       "UTF-8", null); 
+0

向我們展示您的代碼,請 – robjez

+4

http://stackoverflow.com/questions/8200945/how-to-get-html-content-from-a- webview?answertab = votes#tab-top – arun

+0

@robjez添加了代碼。 –

回答

2

下面是示例代碼,現在用戶可以從先前詳細的WebView點擊showmessage後編輯(關於HTML加載的細節被加載)它會觸發java方法。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_testing); 

    WebView webView = (WebView)findViewById(R.id.webView1); 


    webView.getSettings().setJavaScriptEnabled(true); 
    webView.addJavascriptInterface(new WebViewJavaScriptInterface(this), "Android"); 
    webView.addJavascriptInterface(new userDetail("arun",24), "HtmlViewer"); 
    webView.loadUrl("file:///android_asset/yourhtml.html"); 
} 

public class WebViewJavaScriptInterface{ 

    private Context context; 


    public WebViewJavaScriptInterface(Context context){ 
     this.context = context; 
    } 

    @JavascriptInterface 
    public void showMessage(String message){ 
     Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 
    } 
} 

下面是HTML文件

<!DOCTYPE html> 
<html> 
<head> 
    <title>User Detail</title> 

    <script type="text/javascript"> 

     function showMessage(){ 
      var uname = document.getElementById("name").value; 
      var age = document.getElementById("age").value; 

      Android.showMessage(uname+age); 
      return false; 
     } 
    function loadFunction(){ 
    document.getElementById("name").value = window.HtmlViewer.getName(); 
    document.getElementById("age").value = window.HtmlViewer.getAge(); 
    }; 
    </script> 
</head> 

<body onload="loadFunction()"> 

<form id="form"> 
    Name: <input id="name" name="name" type="text"/><br /> 
    Age : <input id="age" name="age" type="text"/><br /> 

    <input type="button" onClick="showMessage()" value="Show Message"> 
</form> 

</body> 
</html> 
+0

完美答案哥們! :) –

+0

布羅謝謝,但我沒有看到編輯被保存。原始的HTML只保存/烤好。 –

+0

嗨,你需要存儲showMessage()方法(即SharedPreference或數據庫)後。並在每次創建活動時進行檢索。 – arun

相關問題