如何将html字符串传递给android上的webview

Posted

技术标签:

【中文标题】如何将html字符串传递给android上的webview【英文标题】:How to pass html string to webview on android? 【发布时间】:2012-02-17 17:45:04 【问题描述】:

您好,我正在解析 xml,然后将其加载到 Web 视图,解析后我创建了四个字符串,以便我可以将所有字符串附加到一个视图。我能够在网络视图上获得两个视图,但不能获得前两个字符串。

请用我的代码建议我,我哪里出错了,以及在 Web 视图上获取格式化的 html 字符串的正确方法是什么。请查看我的代码并帮助我解决此问题。

@Override
    public View getView(int position, View convertView, ViewGroup parent) 
        // TODO Auto-generated method stub
        String chapterTitle = "";
        String SubChapterTitle="";
        String chapterIntro ="";
        String chapterContent="";
        View view = convertView;
        if (convertView == null) 
            // view = inflater.inflate(resourceid, null);
            view = getLayoutInflater().inflate(R.layout.webviewitem, null);
        
        synchronized (view) 
            WebView wv = (WebView) view.findViewById(R.id.contentWebView);

            WebSettings settings = wv.getSettings();
            settings.setUseWideViewPort(true);
            settings.setLoadWithOverviewMode(true);
            settings.setjavascriptEnabled(true);
            settings.setDefaultZoom(ZoomDensity.FAR);
            // wv.setBackgroundColor(0);
            wv.setVerticalScrollBarEnabled(false);
            wv.setHorizontalScrollBarEnabled(false);
            /*String txtChapTitle = Intro.book.getsecretList().get(position)
                    .getChtitle().toString();*/

            if (!(Intro.book.getsecretList().get(position).getChtitle()
                    .toString().equals("")))
            chapterTitle = "<b><fontSize=4>"+Intro.book.getsecretList().get(position)
            .getChtitle().toString()+"</font></b>";
            
            if (!(Intro.book.getsecretList().get(position)
                    .getSubtitle() == null)) 
                SubChapterTitle = "<b><fontSize=4>"+Intro.book.getsecretList().get(position)
                .getSubtitle().toString()+"</font></b>";
            
            if (!(Intro.book.getsecretList().get(position)
                    .getIntro() == null)) 
            chapterIntro = "<b><fontSize=2>"+Intro.book.getsecretList().get(position)
                .getIntro().toString()+"</font></b>";
            
            if (!(Intro.book.getsecretList().get(position)
                    .getContent() == null)) 
            chapterContent = "<fontSize=2>"+Intro.book.getsecretList().get(position)
                .getContent().toString()+"</font>";
            

            StringBuilder content = new StringBuilder();
            content.append(chapterTitle+SubChapterTitle+chapterIntro+chapterContent);

            JsInterface Jsi = new JsInterface();
            Jsi.wordDef = content ;
            Log.v("Content", "" +content);
            wv.addJavascriptInterface(Jsi, "interfaces");

            wv.setWebViewClient(new WebViewClient() 
                @Override
                public void onPageFinished(WebView view, String url) 
                    view.setHapticFeedbackEnabled(false);
                
            );

            wv.setWebChromeClient(new WebChromeClient() 
                @Override
                public boolean onJsAlert(WebView view, String url,
                        String message, JsResult result) 
                    return super.onJsAlert(view, url, message, result);
                
            );

            wv.loadUrl("file:///android_asset/wordview.html");
        
        return view;
    

我能够在网络视图上获得 chapterIntro 和 chaptercontent,但不是前两个字符串,请朋友们帮助我。

【问题讨论】:

【参考方案1】:

在 WebView 中加载数据。调用WebView的loadData()方法

webView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");

你可以看看这个例子

http://developer.android.com/reference/android/webkit/WebView.html

【讨论】:

我试过了,仍然没有发生也试过 loadbaserul 这应该适用于包含 javascript 的字符串吗?它不适合我 应该是webView.loadData(yourData, "text/html; charset=utf-8", "UTF-8"); "text/html; charset=utf-8" 有很大的不同,没有它,符号字符将无法正确呈现。 String htmlData = "你的 HTML 字符串"; mWebView.loadData(htmlData, "text/html", "UTF-8");【参考方案2】:

我已经通过下面的行成功完成了

 //data == html data which you want to load
 String data = "Your data which you want to load";

 WebView webview = (WebView)this.findViewById(R.id.webview);
 webview.getSettings().setJavaScriptEnabled(true);
 webview.loadData(data, "text/html; charset=utf-8", "UTF-8");

或者你可以试试

 webview.loadDataWithBaseURL(null, data, "text/html", "utf-8", null);

【讨论】:

你把这个加到 index.php/index.html 的 中了吗? 如果你愿意,否则没关系 它会在稍有延迟后更新 UI。如何解决这个问题? 如果我想使用 webView.loadUrl("javascript:MyFunction( data, "text/html" 将 html 传递给 javascript 函数,我可以使用 "text/html", "UTF-8" , "UTF-8")? 不,我没有这样用过【参考方案3】:

传递 null 会更好。完整代码如下:

WebView wv = (WebView)this.findViewById(R.id.myWebView);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadDataWithBaseURL(null, "<html>...</html>", "text/html", "utf-8", null);

【讨论】:

你把这个加到 index.php/index.html 的 中了吗? @mthelelibeseti 这是 Android 代码,而不是 HTML。还是我误解了你的问题? 它是所有类型的 html 字符串的有效解决方案。谢谢@JeffreyNeo 真正正确的答案!以上答案对我不起作用,但这个答案对我有用。谢谢@JeffreyNeo【参考方案4】:

我正在使用一些带有一些事件的按钮,转换后的图像文件来自服务器。 加载普通数据对我不起作用,转换为 Base64 工作正常。

String unencodedHtml ="<html><body>'%28' is the code for '('</body></html>";
tring encodedHtml = Base64.encodeToString(unencodedHtml.getBytes(), Base64.NO_PADDING);
webView.loadData(encodedHtml, "text/html", "base64");

在WebView上查找详细信息

【讨论】:

+1 用于编码 HTML。您还可以将正确的字符集传递给getBytes(),如下所示:unencodedHtml.getBytes("UTF-8"),并在 MIME 类型中定义字符集,如下所示:"text/html; charset=utf-8"

以上是关于如何将html字符串传递给android上的webview的主要内容,如果未能解决你的问题,请参考以下文章

如何将包含撇号的字符串传递给android中的查询?

如何将对象(或关联数组)作为属性值传递给我的 Web 组件

如何将 url 参数(查询字符串)传递给 Angular 上的 HTTP 请求?

如何将在我的 Javascript 中创建的字符串数组传递给 C# 代码隐藏文件?

如何将复制的文本传递给Android中的其他活动

如何将html5画布上的点击事件传递给兄弟画布元素上的事件监听器