Objective c shouldStartLoadWithRequest委托用于目标c方法调用

Objective c shouldStartLoadWithRequest委托用于目标c方法调用,objective-c,javascript-events,hybrid,Objective C,Javascript Events,Hybrid,我试图从javascript调用objective c方法我没有使用任何库,比如phonegap,我也成功地调用了objective c方法,但为此,我每次调用之前都会创建一个iframe,然后调用shouldStartLoadWithRequest委托,我只是遵循以下链接 但是如何在不调用webview委托的情况下调用Objective-C方法首先,这是一个相当大的问题。我现在正在开发一个相当大的混合解决方案,在让js对所有平台通用之前,了解混合应用程序的本机部分如何在所有目标平台上工作非

我试图从javascript调用objective c方法我没有使用任何库,比如phonegap,我也成功地调用了objective c方法,但为此,我每次调用之前都会创建一个iframe,然后调用shouldStartLoadWithRequest委托,我只是遵循以下链接


但是如何在不调用webview委托的情况下调用Objective-C方法首先,这是一个相当大的问题。我现在正在开发一个相当大的混合解决方案,在让js对所有平台通用之前,了解混合应用程序的本机部分如何在所有目标平台上工作非常重要

shouldStartLoadWithRequest方法依赖于使用自定义URL从网页到本机代码进行通信。点击一个链接,比如说hybrid://showMenu 将尝试在webview中打开链接,代理将在shouldStartLoadWithRequest中拦截此调用。此时,您将识别该调用并执行您想要的任何操作,例如显示菜单并告诉webview停止加载

黑莓(至少在v10之前)和安卓(最有可能的是Windows Phone)上都有相同的功能。PhoneGap正在跨平台使用这种技术。所有这些函数都将能够捕获hybrid://showMenu 呼叫它们都以不同的方式运行,您必须自己进行研究才能获得代码,但我可以确认,在不同的本机shell中使用相同的Javascript是绝对可能的

使用iframe来加速Javascript是正确的,但是为了获得最佳性能,还需要使用其他技巧。对于每个浏览器,它们都不同,因此如果您想要获得最佳性能,您的Javascript必须在不同平台上至少有一点不同。下面是一篇关于如何在iOS上获得良好性能的好文章:

现在,如果您仍然希望避免使用URL和webview委托在JS和本机代码之间进行通信,那么可以使用更复杂的WebSocket

为此,您必须在每个侦听本地连接的本机包装器中包含一个WebSocket服务器库。然后,Javascript将包含一个WebSocket客户端库,它将使用该库将消息传递给本机代码。双向沟通是可能的。你的JS在不同平台上或多或少都是一样的

我自己还没有实现这个方法,因为它对于我所需要的东西来说太过了,但是LinkdIn的混合应用程序正在使用它。更多信息请点击此处:


如果你选择(2)祝你好运,请分享你的结果。

问题是,你的javascript和应用程序之间的唯一关卡是
UIWebView
,如果你想向你的应用程序发送内容,它必须通过shouldStartLoadWithRequest,这就是你使用iframe东西捕获它的地方。我很确定没有办法绕过它谢谢你的评论,但我正试图让我的js成为所有平台的共同点。我完全同意你说的话