【问题标题】:get html string from Webview and store as html file从 Webview 获取 html 字符串并存储为 html 文件
【发布时间】:2015-08-26 12:02:07
【问题描述】:

我正在尝试在 webview 中加载一个 html 字符串,即不是从 URL 或 sdcard 中的某个 html 文件加载。现在 html 字符串有文本区域。用户可以编辑它。现在我想将更改保存为内部存储中的 html 文件。我该怎么做。我检查了其他 SO 问题并且都使用相同的方法,即使用 URL 或使用一些在我的情况下不起作用的 javascript 方法。

我试过how to get html content from a webview?,但对我没有帮助。我认为这实际上会打开显示代码的弹出窗口,甚至不允许用户进行编辑,这不是我的情况。

代码(这里的文本区域由 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);

【问题讨论】:

  • 请向我们展示您的代码
  • @robjez 添加了代码。
  • @arun 在哪里是用于在编辑后获取 html 并通过在内部存储中单击 android 按钮将其保存的代码。
  • @arun 你可以为上面的代码编写代码,以便在用户编辑编辑器内容后保存在按钮单击上。很容易说问题是一样的。

标签: java android html webview


【解决方案1】:

这里是示例代码,现在用户可以在单击 showmessage 后在 webview 中编辑之前的详细信息(在加载 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>

【讨论】:

  • 完美答案的哥们! :)
  • 兄弟,谢谢,但我没有看到正在保存的编辑。原始 html 仅被保存/烘烤。
  • 您好,您需要在 showMessage() 方法(即 SharedPreference 或数据库)之后存储。并在每次活动 oncreate 时检索。
猜你喜欢
  • 2012-03-04
  • 2016-02-23
  • 2015-04-26
  • 2017-10-12
  • 2018-09-29
  • 2014-05-20
  • 1970-01-01
  • 1970-01-01
  • 2015-06-05
相关资源
最近更新 更多