【问题标题】:Android WebView not loading (probably) Javascript while browser does浏览器加载时,Android WebView 未加载(可能)Javascript
【发布时间】:2021-09-16 15:03:22
【问题描述】:

我遇到了一个非常不寻常且可能很无聊的问题。 Wordpress 上有这个网站,我必须在 webview 中展示它。它对姓名和电子邮件的输入进行一些检查,然后Next 按钮显示其余内容(很可能是 JS,但 idk 是确切的实现——目前在网络编程方面太糟糕了)。它在移动浏览器上也能正常工作。

问题是 webview 似乎没有在单击 Next 按钮时执行任何操作。我已经搜索了一些 SO 问题,并对 webview 设置进行了多次试验和错误,但无济于事。

在 webview 上启用了 Javascript,顺便说一句。这是网址的链接,如果有人想知道(也许也告诉我)究竟是什么问题:http://www.stressandanxietymanagement.com/stress-test/

也许我错过了一些非常基本的东西。顺便说一句,请不要在答案中发布 URL。解决此问题后,我可能必须删除链接。

编辑:logcats 也显示一些相关的东西

11-05 03:50:56.319 19071-19071/innovation.stressmanagement I/chromium: [INFO:CONSOLE(2)] "JQMIGRATE: Migrate is installed, version 1.4.1", source: http://www.stressandanxietymanagement.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1 (2)
11-05 03:52:00.619 19071-19071/innovation.stressmanagement I/chromium: [INFO:CONSOLE(54)] "Uncaught TypeError: Cannot read property 'getItem' of null", source: http://www.stressandanxietymanagement.com/wp-content/plugins/quiz-master-next/js/qmn_quiz.js?ver=4.6.1 (54)
11-05 03:52:11.849 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:12.396 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:16.612 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:21.136 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:23.873 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:26.920 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:27.983 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:27.988 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:29.597 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:30.528 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:32.503 19071-22147/innovation.stressmanagement W/chromium: [WARNING:keycode_converter.cc(91)] empty code string
11-05 03:52:46.558 19071-19071/innovation.stressmanagement I/chromium: [INFO:CONSOLE(54)] "Uncaught TypeError: Cannot read property 'getItem' of null", source: http://www.stressandanxietymanagement.com/wp-content/plugins/quiz-master-next/js/qmn_quiz.js?ver=4.6.1 (54)

单击Next 按钮会显示Uncaught TypeError。然而,问题是它如何在 Web 浏览器上运行良好,但在 webView 中却不行?

编辑:

我使用了这个Advanced WebView Library,效果很好。因此,如果其他人仍然遇到类似问题,请尝试使用该库(或任何其他替代方案)。

但是,我想知道为什么内置的 WebView 小部件无法正常工作。

谢谢

【问题讨论】:

  • 检查 logcat 日志
  • @petey 他们似乎没有给出任何提示。他们中的大多数只是SurfaceLibEGL 相关但没有显示任何视图错误。
  • 一个建议是将其连接到远程 Chrome 调试:developers.google.com/web/tools/chrome-devtools/… 并查看页面的作用。也可以调试webviewsdevelopers.google.com/web/tools/chrome-devtools/…
  • 你能展示你的代码吗?
  • 检查 JavaScript 是用 ES5 还是 ES6 编写的。我发现较新的 Android 设备支持 ES6,而较旧的 Android 设备不支持。

标签: javascript android wordpress webview


【解决方案1】:

当我遇到此类问题时,会使用某种可见的调试消息填充代码,例如将 div 添加到主 dom,并自动对它们进行数字化,以便我知道脚本在哪里停止。

【讨论】:

  • 能否请您详细说明一下。我没有得到你太多。该网站是由他人制作的。此外,我只熟悉基本的 HTML 和 CSS。有这么多知识可以做这样的调试吗?
  • 由于我看不到 javascript 日志,我需要其他类型的反馈,所以我在屏幕的可见位置放置了一个 div,然后在 javascript 中我清理并附加数字。如果你使用 jquery,你可以使用类似 $("#divId").empty().append("4")
  • 是在应用程序中还是在网站页面中完成?对不起,我在这个领域太糟糕了,并且该网站已被其他一些我无权访问的人编码。我什至不知道这种事情在 wordpress 主题中是否可行。
【解决方案2】:

使用 webview 应该是直截了当的。请尝试以下操作:

    wv = (WebView) mRootView.findViewById(R.id.web_view);
    wv.getSettings().setJavaScriptEnabled(true);
    wv.setWebViewClient(new WebViewClient() {
        public void onPageFinished(WebView view, String url) {
            // do whatever you want here once the page is loaded
        }

        @SuppressWarnings("deprecation")
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            // TODO: handle error in some way
        }

        @TargetApi(android.os.Build.VERSION_CODES.M)
        @Override
        public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError err) {
            // manage however you want
        }
    });
    wv.loadUrl("http://www.stressandanxietymanagement.com/stress-test");
}

【讨论】:

  • 你让它工作了吗?我的代码与您的代码相同(仅使用自定义 webview 客户端来覆盖 url)。另外,我尝试了您的代码,但在网站上单击 Next 按钮时仍然没有任何反应。
【解决方案3】:

如果 webView 是您的 WebView 并且您已经完成了

webView.getSettings().setJavaScriptEnabled(true) // Java

webView.settings.javaScriptEnabled = true // Kotlin

,请尝试如下:

  • Java

webView.getSettings().setDomStorageEnabled(true);

  • 科特林:

webView.settings.domStorageEnabled = true

事实上,“Uncaught TypeError: Cannot read property 'getItem' of null”应该通过使用上述代码行启用DOM存储API来修复。

希望对你有帮助~

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2015-08-08
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    相关资源
    最近更新 更多