webkit.messageHandlers 在 iPad 上不起作用

Posted

技术标签:

【中文标题】webkit.messageHandlers 在 iPad 上不起作用【英文标题】:webkit.messageHandlers not working on iPad 【发布时间】:2021-12-30 05:53:22 【问题描述】:

总结问题

我在 App Store 上注册了我的 ios 应用,但它被拒绝了。 基本上它在 iPhone 上运行良好。 但是我听说有一个功能在 iPad 上不能正常工作。 该应用程序部分具有 web 视图。 在我的测试中,它不适用于 iPad(15.2、15.1)。它也可能不适用于旧版本。 从 webview 调用 webkit.messageHandlers 不起作用

描述你的尝试

在项目开始时,我们使用现代 javascript 语法进行开发。 但是,iOS 14.2 版本中的导入/导出语法导致问题并修复了与 webpack 的代码兼容性问题。 我没有尝试过该解决方案,因为我不明白为什么 iPhone 和 iPad 的行为不同。

我的代码

import  checkandroid, checkIos  from "../../js/utils/index.js";

const step1El = document.querySelector("#step1");
const step2El = document.querySelector("#step2");
const btnEl = document.querySelector("button");

btnEl.onclick = function () 
  if (!step1El.checked)
    return alert("블록체인 간편인증 서비스 이용약관에 동의해주세요");
  if (!step2El.checked)
    return alert("개인정보 수집 및 이용 동의서에 동의해주세요");

  if (checkAndroid()) window.Android.agree();
  if (checkIos()) webkit.messageHandlers.agree.postMessage(""); // not working on iPad
;

document.querySelector(".tos_btn").onclick = () => 
  if (checkAndroid()) window.Android.goTermsConditions(true);
  if (checkIos()) webkit.messageHandlers.goTermsConditions.postMessage(true); // not working on iPad
;
document.querySelector(".policy_btn").onclick = () => 
  if (checkAndroid()) window.Android.goCollectionAgreement();
  if (checkIos()) webkit.messageHandlers.goCollectionAgreement.postMessage(""); // not working on iPad
;

【问题讨论】:

【参考方案1】:

我解决了这个问题。

问题是我的错误。

问题出在 checkIos 函数中

之前

export function checkIos() 
  const userAgent = window.navigator.userAgent.toLowerCase();
  if (userAgent.indexOf("iphone") > -1)
    return true;
  return false;

之后

export function checkIos() 
  const userAgent = window.navigator.userAgent.toLowerCase();
  if (userAgent.indexOf("iphone") > -1 || userAgent.indexOf("ipad") > -1)
    return true;
  return false;

【讨论】:

以上是关于webkit.messageHandlers 在 iPad 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

WKUserScript 在 iOS10 中不调用,但在 iOS9 中有效

通知从 Objective C 到 Javascript WKWebkit AVPlayer 的播放结束

将 iOS 中被调用函数的结果返回给 JavaScript 中 WkWebView 中的调用函数

H5调用Android和ios原生方法(react)

杂园日记-H5-IOS-Android混合开发

分配的变量引用在哪里,在堆栈中还是在堆中?