【问题标题】:Android WebView loadUrl JavaScript not working API <=18 (but works in API >=19)Android WebView loadUrl JavaScript 不工作 API <=18(但在 API >=19 中工作)
【发布时间】:2015-09-03 23:49:26
【问题描述】:

问题:
我必须做些什么才能使 webView.loadUrl(javaScript) 在 API 18 或更低版本中工作(与 API 19 或更高版本相比)?

问题描述:
我正在使用 WebView 进行聊天。

  1. 首先我像这样加载 HTML:webView.loadUrl(url);
  2. 然后我再次使用 loadUrl 发送聊天消息,如下所示:webView.loadUrl(javaScript);

这在 API >=19 中工作得非常好,但在 API

仍然会从其他设备收到聊天消息,但其他设备不会从 API 18 或更低版本的设备收到一条消息。 使用完全相同的代码。

我已经搜索了很多并将继续搜索。如果您有答案,任何我可以测试或可以将我重定向到相关信息的想法,请分享。提前谢谢你。

编辑:
字符串中的 JavaScript 标签设置为小写(同样的问题):webView.loadUrl("javascript:" + javaScriptFunction);

【问题讨论】:

    标签: javascript android webview


    【解决方案1】:

    解决方案

    我发现问题在于 JavaScript 函数中发送的(编码的)消息参数中有一个换行符 [ \n ]。使用拆分函数 msg.split("\n"); 删除它使其工作。

    【讨论】:

    • 这真的对你有帮助吗? WebView wv = new WebView(mContext);
      WebSettings settings = wv.getSettings();
      settings.setJavaScriptEnabled(true);

      JavaBridgeToJS bridgeToJS = new JavaBridgeToJS();
      wv.addJavascriptInterface(bridgeToJS, "javaCallback");
      wv.loadUrl("javascript: "var result=foo(); window.javaCallback.result(result)");
      虽然它正在工作在 API > 18 上很好,在 18 上不调用回调 :( 并且没有换行符。
    【解决方案2】:

    我不能确定这是导致您的问题的原因,但请尝试使用

    webView.loadUrl("javascript:" + theJavaScriptCode);
    

    小写"javascript:"

    API 19+ 不关心 loadUrl 中的 JavaScript 协议的情况(尽管您可以在 API 19+ 中使用 evaluateJavascript() 代替),但 API 18 及以下版本无法识别它,除非它被写入小写。

    【讨论】:

    • 我确实有小写的“javascript:”标签,所以不是这样。感谢您分享此信息。你有什么其他的建议?这真的让我很困惑,特别是当我搜索类似的问题并发现人们在使其工作时遇到问题 API >= 19 而不是 API
    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多