window.webkit.messageHandlers 是在 iOS Chrome 和 Firefox 浏览器中定义的,而不是在 Webview 中

问题描述 投票:0回答:1

我假设 webkit.messageHandlers 是在 iOS 上的 webview 上下文中定义的。但是当我对此发出警报时,我得到了某种我无法研究的“价值”。

我可以澄清一下这一点吗?是否有人有更优雅的方法来检查特定页面是否正在 iOS Web 视图中显示。

const isIOS = () => {
    alert(window.webkit?.messageHandlers)
    return window.webkit && window.webkit?.messageHandlers
}

webview uiwebview webkit message-handlers
1个回答
0
投票

您的假设通常是正确的 - 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");
}

© www.soinside.com 2019 - 2024. All rights reserved.