JavaScript 在 Android Webview 中不起作用?

IT技术 javascript android webview
2021-02-20 02:08:51

我正在尝试制作一个相对简单的 iOS 应用程序的 Android 版本,该应用程序使用 web 视图、一些按钮,然后依赖于对 CMS 的 javascript 调用。

但是我被困在了一个非常早期的开发点:webview 不能使用 javascript。我已经阅读了很多关于如何在 Android webview 中启用 JS 的帖子,但到目前为止没有运气。

下面是我的一些代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.setWebChromeClient(new WebChromeClient());
    mWebView.setWebViewClient(new HelloWebViewClient()
    {
        @Override  
        public void onPageFinished(WebView view, String url)  
        {  
            //Calling an init method that tells the website, we're ready 
            mWebView.loadUrl("javascript:m2Init()");
            page1(mWebView);
        }  
    });
  mWebView.loadUrl("http://my_url/mobile/iphone//app.php");  
}

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

}


@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        mWebView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

public void page11(View view)
{
    mWebView.loadUrl("javascript:m2LoadPage(1)");
}

我在这里做错了什么?该 URL 在我的 iOS 应用程序和浏览器中运行良好。但不是在我的应用程序中!

请告诉我这是显而易见的事情...

6个回答

固定的!在错误的刺激下,我发现我需要设置

setDomStorageEnabled(true)

用于网络视图设置。

感谢您的帮助斯蒂芬 :)

@ElijahSaounkine,我纠正了你的错误。:)
2021-04-25 02:08:51
+1 虽然我没有收到“localStorage 错误”,但启用 Dom 存储它缺少的内容以显示页面。
2021-04-29 02:08:51
你救了我的一天。
2021-05-03 02:08:51
为什么,它具体做什么?
2021-05-05 02:08:51
mWebView.getSettings().setDomStorageEnabled(true); 因为愚蠢的我第一次尝试 mWebView.setDomStorageEnabled(true);
2021-05-13 02:08:51

如果 Android 上的 WebView 无法正常工作,我总是尝试确保我设置了这些疯狂的标志,例如,

    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setUseWideViewPort(true);
    webSettings.setBuiltInZoomControls(true);
    webSettings.setDisplayZoomControls(false);
    webSettings.setSupportZoom(true);
    webSettings.setDefaultTextEncodingName("utf-8");

我想知道为什么这些不是默认设置的,现在谁会期望没有 javascript 内容的网页,以及在 DOM 不可用时启用 javascript 的用途是什么,除非指定。希望有人已经将此作为错误或改进/功能请求提交了,并且猴子正在处理它。

然后有一些不推荐使用的东西在某处腐烂,就像这样:

webView.getSettings().setPluginState(PluginState.ON);

所有这些都是为了在应用程序内加载网页。

在 iOS 上,一切都那么简单——Swift 3.0

private func openURLWithInAppBrowser(urlString:String) {
    guard let url = URL(string:urlString) else {
        return
    }
    let sfSafari = SFSafariViewController(url:url)
    present(sfSafari, animated: true, completion: nil)
}
在应用程序开发方面,Android 怎么会做出如此正确和错误的事情。
2021-05-02 02:08:51
谢谢,它真的很有帮助。
2021-05-11 02:08:51
Xamarin Android 也有同样的问题,解决方法类似。谢谢。
2021-05-17 02:08:51

在 webview 中加载 javascript

webView.getSettings().setDomStorageEnabled(true);

您是否在清单中启用了正确的互联网权限?否则一切看起来都很好。无论如何,您是否也在实际的 Android 手机上测试过此代码?而不仅仅是在模拟器上?

这是一个关于略有不同方法很好的教程您可能想尝试一下,看看它是否适合您。

我已经用原始 URL 更新了代码。内容是丹麦语,但这无关紧要。我将尝试检查 http 代码,但由于该站点不是由我托管,而是由朋友托管,因此无法访问该 ip,因此必须等待。
2021-04-25 02:08:51
当您使用IP地址号码而不是域名时会发生什么?另外,你能不能用域名再试一次,但这次用一个普通的 index.html 页面代替?我的想法不多了。您能与我们分享您正在使用的确切网址吗?如果没有,那没关系。我只是想我会问。我的下一步是尝试检查您的 Web 应用程序返回的 http 标头响应代码。在某些方面,我对股票浏览器有效而您的 url 加载无效并不感到惊讶。互联网浏览器可以令人难以置信地宽容。此外,它可能只是一个用户代理的事情。
2021-05-09 02:08:51
状态码是 200,所以这不是问题。但我在 logcat 中发现了一个错误:ERROR/Web Console(661): TypeError: Result of expression 'localStorage' [null] is not an object。slagterfriis.moski2.net/mobile/iphone/assets/script.js:16知道这是什么意思吗?
2021-05-09 02:08:51
我刚刚在我的三星 Galaxy SII 上尝试过,但没有运气。权限在清单中添加为: <uses-permission android:name="android.permission.INTERNET" /> 我会给链接看看:)
2021-05-12 02:08:51
我已经下载了您链接的项目示例,该示例有效,但是添加我的 URL 仍然不行。奇怪的是,如果我只是在 androids 自己的浏览器中输入 url(而不是通过我的应用程序中的 webview),它就可以工作。这么奇怪..
2021-05-12 02:08:51

在 MainActivity.java 中添加以下代码行

它帮助我启用了 js

  webSetting.setJavaScriptEnabled(true);
  webView.setWebChromeClient(new WebChromeClient());
  webView.setWebViewClient(new WebViewClient());

不要忘记 AndroidManifest 文件中的这个权限。

<uses-permission Android:name="Android.permission.INTERNET" />