我假设 webkit.messageHandlers 是在 iOS 上的 webview 上下文中定义的。但是当我对此发出警报时,我得到了某种我无法研究的“价值”。
我可以澄清一下这一点吗?是否有人有更优雅的方法来检查特定页面是否正在 iOS Web 视图中显示。
const isIOS = () => {
alert(window.webkit?.messageHandlers)
return window.webkit && window.webkit?.messageHandlers
}
您的假设通常是正确的 - window.webkit.messageHandlers 用于在 webview 中运行的 JavaScript 和本机 iOS 代码之间进行通信。此接口允许 Web 视图中的 JavaScript 向主机应用程序发送消息,主机应用程序可以响应或执行本机操作
function isInsideIOSWebView(expectedHandler) {
const handlers = window.webkit?.messageHandlers;
if (!handlers) {
return false; // No message handlers, so not in an iOS webview.
}
// Optionally, you can check for a specific handler to be more certain.
if (handlers[expectedHandler]) {
return true; // A known handler exists, indicating iOS webview.
}
// If you want to see what handlers are available, you can try logging them to console.
console.log("Available message handlers:", handlers);
return false; // No known handlers, unsure if in an iOS webview.
}
// Usage
if (isInsideIOSWebView()) {
console.log("Inside an iOS webview");
} else {
console.log("Not in an iOS webview");
}