Android Web 视图未加载此静态 Html

问题描述 投票:0回答:3

我有一个 html 字符串,可以在浏览器中正常加载,但是当尝试在 andriod Web 视图中加载时,它显示空白屏幕,没有任何错误。我不想通过文件 url 加载,因为我希望该字符串中的参数是动态的。

public class MainActivity extends Activity {


    private ProgressDialog  prg;
    private  WebView webView;
    private  int counter=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        String htmlString = "<!DOCTYPE html>\n" +
                "<html>\n" +
                "\n" +
                "<head>\n" +
                "  <meta charset=\"utf-8\">\n" +
                "  <title></title>\n" +
                "  <meta name=\"author\" content=\"\">\n" +
                "  <meta name=\"description\" content=\"\">\n" +
                "  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n" +
                "\n" +
                "  \n" +
                "</head>\n" +
                "\n" +
                "<body>\n" +
                "\n Hello" +
                "<my-component source-url=\"https://fcc3ddae59ed.us-west-2.playback.live-video.net/api/video/v1/us-west-2.893648527354.channel.DmumNckWFTqz.m3u8\"/>\n" +
                "\n" +
                "<script src='https://unpkg.com/[email protected]/dist/test/test.js'></script>\n" +
                "</body>\n" +
                "\n" +
                "</html>";
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView =(WebView)findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setAppCacheEnabled(true);
        webView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getPath());
        webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
        webView.setWebViewClient(new WebViewClient());
        webView.loadData(htmlString, "text/html; charset=utf-8", "UTF-8");;
    
    }


    public void getWebview(String myurl)
    {

        webView.setWebViewClient(new WebViewClient()
        {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                prg.show();
                return super.shouldOverrideUrlLoading(view, url);
            }

            @Override
            public void onPageFinished(WebView view, String url) {

                prg.dismiss();

                view.getSettings().setJavaScriptEnabled(true);

                super.onPageFinished(view, url);
            }


            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }

        });
        prg = ProgressDialog.show(MainActivity.this, "Blog App", "İçerik Yükleniyor", true);
        webView.loadUrl(myurl);
    }


    @Override
    protected void onResume() {
        super.onResume();
    }


    @Override
    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }

    }


}

这里有什么问题有人可以指点我吗?

编辑

android
3个回答
2
投票

尝试以下 -> 未提供基本 url 的问题。

public class MainActivity2 extends Activity {


private ProgressDialog prg;
private WebView webView;
private int counter = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {

    String htmlString = "<!DOCTYPE html>\n" +
            "<html>\n" +
            "\n" +
            "<head>\n" +
            "  <meta charset=\"utf-8\">\n" +
            "  <title></title>\n" +
            "  <meta name=\"author\" content=\"\">\n" +
            "  <meta name=\"description\" content=\"\">\n" +
            "  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n" +
            "\n" +
            "  \n" +
            "</head>\n" +
            "\n" +
            "<body>\n" +
            "\n Hello" +
            "<my-component source-url=\"https://fcc3ddae59ed.us-west-2.playback.live-video.net/api/video/v1/us-west-2.893648527354.channel.DmumNckWFTqz.m3u8\"/>\n" +
            "\n" +
            "<script src='https://unpkg.com/[email protected]/dist/test/test.js'></script>\n" +
            "</body>\n" +
            "\n" +
            "</html>";
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_web);

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

    WebSettings settings = webView.getSettings();

    settings.setBuiltInZoomControls(true);
    settings.setDomStorageEnabled(true);
    settings.setJavaScriptEnabled(true);
    settings.setAppCacheEnabled(true);
    settings.setAppCachePath(getApplicationContext().getCacheDir().getPath());
    settings.setCacheMode(WebSettings.LOAD_DEFAULT);
    webView.setWebViewClient(new WebViewClient());
    webView.loadDataWithBaseURL("https://fcc3ddae59ed.us-west-2.playback.live-video.net", htmlString, "text/html", "UTF-8", null);
    
}

public void getWebview(String myurl) {

    webView.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            prg.show();

            return super.shouldOverrideUrlLoading(view, url);
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            prg.dismiss();

            view.getSettings().setJavaScriptEnabled(true);

            super.onPageFinished(view, url);
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
        }

    });
    prg = ProgressDialog.show(MainActivity2.this, "Blog App", "İçerik Yükleniyor", true);
    webView.loadUrl(myurl);

}

@Override
protected void onResume() {
    super.onResume();

}

@Override
public void onBackPressed() {


    if (webView.canGoBack()) {
        webView.goBack();
    } else {
        super.onBackPressed();
    }

}

}


0
投票

如果您知道 html,您可以创建一个 html 文件。在您的 app>src>main 目录中创建一个名为“assets”的目录。在此目录中放置格式正确的 html 文件,称为 webViewfile.html 等

然后从您的网络视图中您可以像这样加载它

    webPlayerWebView.loadUrl("file:///android_asset/webViewfile.html")

您的 html 文件上下文是

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <title></title>
    <meta name="author" content=""/>
    <meta name="description" content=""/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
</head>

<body style="margin: 0;">
<my-component source-url="https://fcc3ddae59ed.us-west-2.playback.live-video.net/api/video/v1/us-west-2.893648527354.channel.DmumNckWFTqz.m3u8"></my-component>
<script src="https://unpkg.com/[email protected]/dist/test/test.js"></script>

</body>
</html>

我已经测试过了,它有效


0
投票

用这个:

webView.loadDataWithBaseURL(null, htmlString , "text/html", "utf-8", null);

现在应该可以工作了

user8608556 答案正确 如果您不希望视频网址作为动态的基本网址,请尝试提供您的脚本网址作为基本网址

webView.loadDataWithBaseURL("https://unpkg.com/[email protected]/dist/test/test.js", htmlString , "text/html", "utf-8", null);
© www.soinside.com 2019 - 2024. All rights reserved.