Uncaught TypeError: невозможно установить значение свойства ›null» в Android.

Пытаюсь обновить информацию через java script code in Android side.

На Андроид версии 4.3 работает.

Но в Android версии 4.4 появились эти ошибки, поэтому не могу обновить информацию.

[ИНФОРМАЦИЯ: КОНСОЛЬ (1)] «Неперехваченная ошибка типа: невозможно установить значение свойства« значение », равное нулю», источник: (1) I / chromium ﹕ [ИНФОРМАЦИЯ: КОНСОЛЬ (1)] «Неперехваченная ошибка типа: невозможно установить значение свойства» для null ", источник: (1) I / chromium ﹕ [INFO: CONSOLE (1)]" Uncaught TypeError: Невозможно вызвать метод 'submit' для null ", источник: (1)

Я знаю из версии Android 4.4, что уже использовал новый Web View для поддержки , но я не знаю, в чем главная проблема.

Люди, которые умеют успешно обновлять информацию с помощью кода Java-скрипта даже на Android 4.4,

Скажи пожалуйста,

Спасибо вам,

p / s: Коды

// Load Web View to update new SSID, Security Key, Security Mode
            WebView mWv = new WebView(this);
            // Simplest usage: note that an exception will NOT be thrown
            // if there is an error loading this page (see below).

            mWv.loadUrl("http://" + Constants.IP + "/cgi-bin/input");

            mWv.getSettings().setJavaScriptEnabled(true);
            mWv.getSettings().setDomStorageEnabled(true);

            mWv.setWebChromeClient(new WebChromeClient());

            mWv.setWebViewClient(new WebViewClient(){
                public void onPageFinished(WebView mWv, String url) {
                    super.onPageFinished(mWv, url);

                    /**
                     * Pass parametes :
                     * - New SSID
                     * - New Security Key
                     * - Display raw picture
                     */
                    // @"document.getElementsByName('%@')[0].value='%@'"
                    mWv.loadUrl("javascript:document.getElementById('wifi_ssid').value='" +
                                        mEtSSID.getText().toString() + "'");

                    if (mEtSecurityKey.length() == 0
                            | Utils.checkValidatePassword(mEtSecurityKey, 8)) {
                        mWv.loadUrl("javascript:document.getElementById('wifi_key').value='" +
                                            mEtSecurityKey.getText().toString() + "'");

                        if (mCbDisplayRawPicture.isChecked())
                            mWv.loadUrl(
                                    "javascript:document.getElementById('displayraw').value='checked'");
                        else
                            mWv.loadUrl("javascript:document.getElementById('displayraw').value=''");

                        // @"document.forms['sendForm'].submit()"
                        mWv.loadUrl("javascript:document.getElementById('sendForm').submit()");

                        /**
                         * Also get new SSID and new Security Key in Card Setting page
                         */
                        IS_BACK_FROM_CHANGE_SSID_AND_SCCURITY_KEY_TO_CARD_SETTING_PAGE = true;

                        /**
                         * Finish current Change SSID And Security Key after submit success
                         */
                        finish();
                    } else
                        Toast.makeText(SettingAndReviewSettingPage.this,
                                       getString(R.string.toast_your_password_is_case_sensitive),
                                       Toast.LENGTH_SHORT).show();
                }
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }

            });

РЕШЕНИЕ

Я удивился, когда узнал решение. Мне нужно определить переменные для кодов сценариев Java. Как следующий код, и он сработал.

mWv.setWebViewClient(new WebViewClient(){
                public void onPageFinished(WebView mWv, String url) {
                    super.onPageFinished(mWv, url);

                    /**
                     * Pass parametes :
                     * - New SSID
                     * - New Security Key
                     * - Display raw picture
                     */
                    // @"document.getElementsByName('%@')[0].value='%@'"

                    mWv.loadUrl("javascript:var x = document.getElementById('wifi_ssid').value = '" +
                                        mEtSSID.getText().toString() + "';");

                    // need check password is correct or not
                    // - empty or minimum has 8 characters.
                    // - have both character & number in typed password
                    if ((mEtSecurityKey.length() == 0
                            | Utils.checkValidatePassword(mEtSecurityKey, 8)
                            & Utils.checkValidatePassword(mEtSecurityKey.getText().toString()))) {
                        mWv.loadUrl("javascript:var y = document.getElementById('wifi_key').value = '" +
                                            mEtSecurityKey.getText().toString() + "';");

                        if (mCbDisplayRawPicture.isChecked())
                            mWv.loadUrl("javascript:var z = document.getElementById('displayraw').value='checked'");
                        else
                            mWv.loadUrl("javascript:var z = document.getElementById('displayraw').value=''");

                        // @"document.forms['sendForm'].submit()"
                        // mWv.loadUrl("javascript:console.log('sendForm: '+document.getElementById('sendForm').value);");
                        mWv.loadUrl("javascript:document.getElementById('sendForm').submit()");

                        /**
                         * Also get new SSID and new Security Key in Card Setting page
                         */
                        IS_BACK_FROM_CHANGE_SSID_AND_SCCURITY_KEY_TO_CARD_SETTING_PAGE = true;

                        /**
                         * Finish current Change SSID And Security Key after submit success
                         */
                        finish();
                    } else
                        Toast.makeText(
                                ChangeSSIDAndPasswordPage.this,
                                getString(R.string.toast_your_password_is_case_sensitive),
                                Toast.LENGTH_SHORT).show();
                }
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
            });

person Huy Tower    schedule 14.01.2015    source источник
comment
Взгляните на принятое решение здесь (оно сработало для меня) stackoverflow.com/questions/25602117/   -  person dgtale    schedule 13.02.2015
comment
@dgtale На самом деле ваше решение не сработало для меня. Старший Я уже нашел решение. Необходимо соответствующим образом отредактировать код сценария Java. Смотрите мой ответ.   -  person Huy Tower    schedule 25.02.2015


Ответы (3)


Простое решение - убедиться, что в WebView включен следующий параметр:

WebView webView = new WebView(this); // this is the context
webView.getSettings().setDomStorageEnabled(true);

Это позволяет браузеру хранить DOM-модель элементов страницы, чтобы Javascript мог выполнять с ней операции.

Подсказка: работает только с api 7.

person Andrew Aziz    schedule 18.02.2015

Я удивился, когда узнал решение. Мне нужно определить переменные для кодов сценариев Java. Как следующий код javascript:var x =, и это сработало.

mWv.setWebViewClient(new WebViewClient(){
                public void onPageFinished(WebView mWv, String url) {
                    super.onPageFinished(mWv, url);

                    /**
                     * Pass parametes :
                     * - New SSID
                     * - New Security Key
                     * - Display raw picture
                     */
                    // @"document.getElementsByName('%@')[0].value='%@'"

                    mWv.loadUrl("javascript:var x = document.getElementById('wifi_ssid').value = '" +
                                        mEtSSID.getText().toString() + "';");

                    // need check password is correct or not
                    // - empty or minimum has 8 characters.
                    // - have both character & number in typed password
                    if ((mEtSecurityKey.length() == 0
                            | Utils.checkValidatePassword(mEtSecurityKey, 8)
                            & Utils.checkValidatePassword(mEtSecurityKey.getText().toString()))) {
                        mWv.loadUrl("javascript:var y = document.getElementById('wifi_key').value = '" +
                                            mEtSecurityKey.getText().toString() + "';");

                        if (mCbDisplayRawPicture.isChecked())
                            mWv.loadUrl("javascript:var z = document.getElementById('displayraw').value='checked'");
                        else
                            mWv.loadUrl("javascript:var z = document.getElementById('displayraw').value=''");

                        // @"document.forms['sendForm'].submit()"
                        // mWv.loadUrl("javascript:console.log('sendForm: '+document.getElementById('sendForm').value);");
                        mWv.loadUrl("javascript:document.getElementById('sendForm').submit()");

                        /**
                         * Also get new SSID and new Security Key in Card Setting page
                         */
                        IS_BACK_FROM_CHANGE_SSID_AND_SCCURITY_KEY_TO_CARD_SETTING_PAGE = true;

                        /**
                         * Finish current Change SSID And Security Key after submit success
                         */
                        finish();
                    } else
                        Toast.makeText(
                                ChangeSSIDAndPasswordPage.this,
                                getString(R.string.toast_your_password_is_case_sensitive),
                                Toast.LENGTH_SHORT).show();
                }
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
            });
person Huy Tower    schedule 25.02.2015

Простое решение:

 wv.loadUrl("javascript:document.getElementById('xx').value='';void(0);");

Чтобы предотвратить перенаправление браузером на текстовую версию результата оценки этого JavaScript, добавьте строку JavaScript с void(0);

Ссылка: оператор void

person Gayan Weerakutti    schedule 02.03.2016