JavaScript не работает в Android Webview? - PullRequest
53 голосов
/ 25 сентября 2011

Я пытаюсь сделать Android-версию относительно простого приложения для iOS, которое использует веб-просмотр, некоторые кнопки, а затем использует вызовы javascript для CMS.

Но я застрял на довольно раннем этапеТочка разработки: веб-представление не работает с javascript. Я прочитал много постов о том, как включить JS в веб-обзоре Android, но пока не повезло.

Ниже приведен фрагмент моего кода:

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 и в браузере.Но не в моем приложении!

Пожалуйста, скажите мне, что это что-то очевидное ...

Ответы [ 8 ]

91 голосов
/ 27 сентября 2011

ИСПРАВЛЕНО! Подстегнутая ошибкой, я обнаружил, что мне нужно установить setDomStorageEnabled(true) для настроек веб-просмотра.

Спасибо за помощь, Стефан :)

31 голосов
/ 21 марта 2017

Если что-то с WebView на Android не работает, я всегда стараюсь установить такие сумасшедшие флаги, как,

    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 в настоящее время, и какова польза от включения javascript, когда DOM недоступен, если не указано иное. Надеюсь, кто-то уже подал это как ошибку или улучшение / запрос на добавление, и обезьяны работают над этим.

и затем гнилые вещи где-то гниют, как это:

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)
}
6 голосов
/ 23 января 2018

Загрузка javascript в webview

webView.getSettings().setDomStorageEnabled(true);
5 голосов
/ 26 сентября 2011

Вы включили правильное интернет-разрешение в манифесте?В противном случае все выглядит хорошо.Случайно, вы также тестировали этот код на реальном телефоне Android?И не только на эмуляторе?

Вот хороший учебник по немного другому подходу.Вы можете попробовать его, чтобы увидеть, работает ли он для вас.

1 голос
/ 02 июля 2012

Это видео (http://youtu.be/uVqp1zcMfbE) дало мне подсказку, как заставить его работать. Главное - сохранить ваши файлы html и js в папке Android assets/. Затем вы можете легко получить к ним доступ через:

webView.loadUrl("file:///android_assets/your_page.html");
0 голосов
/ 23 ноября 2018

Добавьте следующие строки кода в MainActivity.java

Это помогло мне включить JS

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

не забудьте об этом разрешении в файле AndroidManifest.

<uses-permission Android:name="Android.permission.INTERNET" />
0 голосов
/ 12 сентября 2018

Для включения всплывающих окон JavaScript в WebView необходимо установить webChromeClient и переопределить openFileChooser методы.

    mWebview.setWebChromeClient(new WebChromeClient(){
        // For Android 4.1+
        @SuppressWarnings("unused")
        public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
            mUploadMessage = uploadMsg;

            Intent i = new Intent(Intent.ACTION_GET_CONTENT);

            i.addCategory(Intent.CATEGORY_OPENABLE);
            i.setType(acceptType);

            startActivityForResult(Intent.createChooser(i, "SELECT"), 100);
        }

        // For Android 5.0+
        @SuppressLint("NewApi")
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
            if (mUploadMessageArr != null) {
                mUploadMessageArr.onReceiveValue(null);
                mUploadMessageArr = null;
            }

            mUploadMessageArr = filePathCallback;

            Intent intent = fileChooserParams.createIntent();

            try {
                startActivityForResult(intent, 101);
            } catch (ActivityNotFoundException e) {
                mUploadMessageArr = null;

                Toast.makeText(activity,"Some error occurred.", Toast.LENGTH_LONG).show();

                return false;
            }

            return true;
        }
    });

И обработайте onActivityResult, как показано ниже:

@SuppressLint("NewApi")
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 100) {
        if (mUploadMessage == null) return;
        Uri result = data == null || resultCode != Activity.RESULT_OK ? null : data.getData();
        mUploadMessage.onReceiveValue(result);
        mUploadMessage = null;
    }

    else if (requestCode == 101) {
        if (mUploadMessageArr == null) return;
        mUploadMessageArr.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, data));
        mUploadMessageArr = null;
    }

}
0 голосов
/ 07 июня 2018

Просто разрешите вашему WebView запускать JS, просто так:

WebView web=(WebView)findViewById(R.id.web);
web.getSettings().setJavaScriptEnabled(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...