JavaScript无法在Android Webview中使用?

Dav*_*d K 60 javascript android webview

我正在尝试制作Android版本的相对简单的iOS应用程序,它使用webview,一些按钮然后依赖于对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)");
}
Run Code Online (Sandbox Code Playgroud)

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

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

Dav*_*d K 105

固定!在错误的刺激下,我发现我需要设置setDomStorageEnabled(true) webview设置.

谢谢你的帮助斯蒂芬:)

  • 自从愚蠢的我首先尝试了mWebView.getSettings()。setDomStorageEnabled(true); (3认同)

com*_*eak 34

如果在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");
Run Code Online (Sandbox Code Playgroud)

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

然后有一些被弃用的东西在某处腐烂,像这样:

webView.getSettings().setPluginState(PluginState.ON);
Run Code Online (Sandbox Code Playgroud)

这一切都是为了在app中加载网页.

在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)
}
Run Code Online (Sandbox Code Playgroud)


Shi*_*mar 7

在webview中加载javascript

webView.getSettings().setDomStorageEnabled(true);
Run Code Online (Sandbox Code Playgroud)


Ste*_*zyk 6

您是否在清单中启用了正确的Internet权限?否则一切看起来都很好。您有没有在实际的Android手机上测试过此代码?不仅在模拟器上?

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


pra*_*ute 6

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

它帮助我启用了 js

  webSetting.setJavaScriptEnabled(true);
  webView.setWebChromeClient(new WebChromeClient());
  webView.setWebViewClient(new WebViewClient());
Run Code Online (Sandbox Code Playgroud)

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

<uses-permission Android:name="Android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)


Mru*_*ora 5

主要是,这三行足以让 Javascipt 在 webView 中工作......

webSetting.setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
Run Code Online (Sandbox Code Playgroud)

如果在那之后它也不起作用,那么也添加下面的行。

webSettings.setDomStorageEnabled(true);
Run Code Online (Sandbox Code Playgroud)

实际上,您需要 setJavaScriptEnabled() 和 setWebChromeClient(new WebChromeClient()) 才能使 JavaScript 工作。如果你只使用 webSetting.setJavaScriptEnabled(true); 那么它就行不通了。