【问题标题】:Issues in loading Angular JS website in Android Webview在 Android Webview 中加载 Angular JS 网站的问题
【发布时间】:2016-02-16 21:17:01
【问题描述】:

大家好,我正在尝试将GTV 加载到 Android WebView 中。它可以很好地加载到移动浏览器中,但不能加载到 webview 中。 这是我的代码。

  WebView theWebPage  = new WebView(this);
    theWebPage.getSettings().setJavaScriptEnabled(true);

    theWebPage.getSettings().setPluginState(WebSettings.PluginState.ON);
    super.onCreate(savedInstanceState);
    getSupportActionBar().hide();
    setContentView(theWebPage);
    WebViewClient client = new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    };
    theWebPage.setWebViewClient(client);

// client.onPageStarted(theWebPage);

    theWebPage.loadUrl("http://gtvqa.com/#!/");

【问题讨论】:

标签: android angularjs webview android-webview


【解决方案1】:

我发现这个功能很有帮助

this.webView.getSettings().setDomStorageEnabled(true);

【讨论】:

  • 欢迎来到 SO!将代码作为解决方案发布时,解释您的代码如何解决 OP 的问题会很有帮助:)
  • 我遇到了同样的问题。我试图在 android studio 中用 webView 包装一个基于 AngularJs 的 web 应用程序。当我尝试登录时,什么也没发生。放入这行代码后,应用程序在 webView 中像魔术一样工作:)
【解决方案2】:

AngularJS 需要兼容 HTML5 的浏览器,我不认为默认的 Android WebView 是。除非您是该网站的开发者,并且可以向页面添加现代化工具以尝试解决旧的、不兼容的浏览器,否则您可能无法解决此问题。

【讨论】:

  • Ofcource 我可以添加。您所说的 mordenizer 是指 modernizer.js 吗?我加一下看看。
  • 我在Enable HTML5 in WebView中找到了另一种启用HTML5的方法。顺便说一句,您确定了真正的问题。谢谢@mbielski
  • 是的,这就是我的意思(modernizer.js),但很高兴你找到了更好的解决方案。
  • 我正在寻找我的 Angular 9 没有按预期启动的原因。你救了我!谢谢!
【解决方案3】:

默认情况下,android webview 不支持 HTML5 功能,因此有时 AngularJS 网站会出现问题。

您必须在 webview 中启用 HTML5 才能解决该问题。

按照这个方法,你会没事的。

private void initWebView(View view) {
    webView=findViewById(R.id.webView);
    loadWebViewDatafinal(webView, webURL);
}

private void loadWebViewDatafinal(WebView wv, String url) {
        WebSettings ws=wv.getSettings();

        ws.setJavaScriptEnabled(true);
        ws.setAllowFileAccess(true);


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ECLAIR) {
            try {
                Log.e("WEB_VIEW_JS", "Enabling HTML5-Features");
                Method m1=WebSettings.class.getMethod("setDomStorageEnabled", new Class[]{Boolean.TYPE});
                m1.invoke(ws, Boolean.TRUE);

                Method m2=WebSettings.class.getMethod("setDatabaseEnabled", new Class[]{Boolean.TYPE});
                m2.invoke(ws, Boolean.TRUE);

                Method m3=WebSettings.class.getMethod("setDatabasePath", new Class[]{String.class});
                m3.invoke(ws, "/data/data/" + getActivity().getPackageName() + "/databases/");

                Method m4=WebSettings.class.getMethod("setAppCacheMaxSize", new Class[]{Long.TYPE});
                m4.invoke(ws, 1024 * 1024 * 8);

                Method m5=WebSettings.class.getMethod("setAppCachePath", new Class[]{String.class});
                m5.invoke(ws, "/data/data/" + getActivity().getPackageName() + "/cache/");

                Method m6=WebSettings.class.getMethod("setAppCacheEnabled", new Class[]{Boolean.TYPE});
                m6.invoke(ws, Boolean.TRUE);

                Log.e("WEB_VIEW_JS", "Enabled HTML5-Features");
            } catch (NoSuchMethodException e) {
                Log.e("WEB_VIEW_JS", "Reflection fail", e);
            } catch (InvocationTargetException e) {
                Log.e("WEB_VIEW_JS", "Reflection fail", e);
            } catch (IllegalAccessException e) {
                Log.e("WEB_VIEW_JS", "Reflection fail", e);
            }
        }

        wv.loadUrl(url);
    }

【讨论】:

    【解决方案4】:

    以防万一有人想知道 C# 答案,

    webView.Settings.JavaScriptEnabled = true; 
    

    这一行救了我的命。

    【讨论】:

    • 为您的代码添加解释并正确格式化。
    • 我的 android webview 无法加载 Angular 网站。在尝试了很多不成功的修复后,将此行添加到我的初始化 webview 工作并且网站完美加载:webView.Settings.JavaScriptEnabled = true;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    相关资源
    最近更新 更多