Android 以编程方式更改Web视图中的HTML

Android 以编程方式更改Web视图中的HTML,android,android-webview,Android,Android Webview,我正在使用 webMain.loadUrl("file:///android_asset/record.html"); 这很好,但在html中有许多地方我想使用应用程序中的信息。例如,HTML可能包含读取“[自定义]”的文本。有没有办法用应用程序传递的信息替换该单词?是的,您可以通过将页面加载到字符串中,然后将该字符串加载到Web视图中来实现 例如: String summary=“你得了192分。”; loadData(摘要,“text/html”,空); 摘自实际上,我不明白record

我正在使用

webMain.loadUrl("file:///android_asset/record.html");

这很好,但在html中有许多地方我想使用应用程序中的信息。例如,HTML可能包含读取“[自定义]”的文本。有没有办法用应用程序传递的信息替换该单词?

是的,您可以通过将页面加载到字符串中,然后将该字符串加载到Web视图中来实现

例如:

String summary=“你得了192分。”;
loadData(摘要,“text/html”,空);

摘自

实际上,我不明白record.html的文件大小为什么会影响代码的维护。从asset中的html文件中读取html字符串(使用Java reader类或其他方法),使用replaceAll函数和Regex替换html文件中的所有[Custom]。html的使用时间不应真正影响您维护代码的方式。这应该是一个性能问题,或者字符串非常长,超过了java字符串的限制

我以前使用过的一些代码:

InputStream is = getApplicationContext().getAssets().open("details/product_jsmodify.html");
Reader r = new InputStreamReader(is);
String details = Utils.readertoString(r);
details = details.replace("%product_name%",productName );

Utils是我做字符串转换的类。我在这里不使用正则表达式,因为我只替换word一次。然后我像Cata一样加载字符串。我想这是一个非常干净的问题。

这是一个古老且已经被接受的问题,但是我相信,使用javascript可以以更优雅的方式解决这个问题

将html文件保存在assets文件夹中,并用具有唯一id的div元素包围要替换为的文本

<html>
  <head> ... <head> 
  <body> 
    Static text
    <div id="replace1">replace me</div>
    <div id="replace2">replace me too</div> 
    More static text ... 
  </body>
</html>
此函数最好直接放在html文件中,请更新
部分,如下所示:

<head>
  ...
    <script type="text/javascript">
        function replace(id, newContent)
        {
            document.getElementById(id).innerHTML = newContent;
        }
    </script>
</head>

使用此选项可以避免将潜在的大数据读入内存,并避免对其执行不必要的昂贵操作。

这一选项对我很有效,html与文本和图像一起使用

  InputStream is = getAssets().open(html_name);
            int size = is.available();

            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();

            String str = new String(buffer);
            str = str.replace("InitialTextToBeReplaced", "TextAfterReplacement");

       //Now instead of webview.loadURL(""), I needed to do something like -
            webView.loadDataWithBaseURL("file:///android_asset/", str, "text/html", "UTF-8",null);
这是为我工作

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Payment Demo</title>
</head>
<body>
    <div>
        <input type="text" id="uname " name="uname " value="">
        <input type="text" id="pass" name="pass" value="">
    </div>
</body>
</html>

这绝对是一个解决方案,但record.html是一个大文件。为了维护本规范,我不希望以这种方式重做整个事情。不幸的是,我认为如果不将html转换为字符串,就无法解决这个问题,因为我认为没有办法告诉您的webview只更新其中的一些html。我想这样做,因为更改record.html比更改带有200行串联字符串。我尝试了这个更改,它似乎给了我正确的信息,但当我调用webMain.loadData(详细信息,“text/html”,null)时;它给出了一个页面未找到错误。它找不到的页面恰好是record.html中的所有代码。如果您有字符串的标记,我想您可能需要使用loadDataWithBaseUrl这就是键。谢谢我收到一个错误
无法解决UTIL
。。Utils图书馆是什么@OSMman@reTsNot不是一个库,只是我的自定义类,它包含一个方便的方法将读取器转换为字符串。基本上只是一个循环,将reader.read()附加到一个字符串。如果我的html中有一些文本“{{UserName}非常好。{{UserName}}是一个程序员。{{{UserGender}}也可以开发很棒的应用程序”,我需要像Richard一样替换它。理查德是个程序员。他还可以开发很棒的应用程序。现在,我是否需要为两个{{UserName}}提供两个不同的ID?我是否可以为相似/相同的字符串提供相同的ID,因为我可能有多个html文件,其中包含不同的字符串序列,通过不同的唯一ID管理相同的字符串troublesome@DroidWormNarendra在这种情况下,我想您应该使用class而不是id。这行代码将有助于更改我在android的webview中选择的语言。。感谢dudewb.getSettings().setJavaScriptEnabled(true);
WebView helpView = (WebView)findViewById(R.id.helpView);
helpView.getSettings().setJavaScriptEnabled(true);
helpView.setWebViewClient(new WebViewClient() {
  @Override
  public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.loadUrl("javascript:replace('replace1', 'new content 1')");
    view.loadUrl("javascript:replace('replace2', 'new content 2')");
  }
});
helpView.loadUrl("file:///android_asset/help.html");
  InputStream is = getAssets().open(html_name);
            int size = is.available();

            byte[] buffer = new byte[size];
            is.read(buffer);
            is.close();

            String str = new String(buffer);
            str = str.replace("InitialTextToBeReplaced", "TextAfterReplacement");

       //Now instead of webview.loadURL(""), I needed to do something like -
            webView.loadDataWithBaseURL("file:///android_asset/", str, "text/html", "UTF-8",null);
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Payment Demo</title>
</head>
<body>
    <div>
        <input type="text" id="uname " name="uname " value="">
        <input type="text" id="pass" name="pass" value="">
    </div>
</body>
</html>
WebView wb = (WebView) findViewById(R.id.webView1); 
wb.loadUrl("file:///android_asset/web1.html");
wb.getSettings().setJavaScriptEnabled(true);

wb.setWebViewClient(new WebViewClient() {

    @Override
    public void onPageFinished(WebView web, String url) {
        // TODO Auto-generated method stub
        String uname = "email@mail.com";
        String pass = "******";

        web.loadUrl("javascript:(function(){document.getElementById('uname').value = '"+uname+"';})()");
        web.loadUrl("javascript:(function(){document.getElementById('pass').value = '"+pass+"';})()");
            
    }
});