【问题标题】:Listening for events in a UIWebView (iOS)在 UIWebView (iOS) 中监听事件
【发布时间】:2011-12-07 21:29:03
【问题描述】:

我正在尝试从我在 iOS 应用程序的 UIWebView 中打开的网页中侦听一个事件(特别是单击按钮)。我知道在其他语言中,有一些方法可以将事件侦听器附加到某些 Web 调用,但我还没有找到在 Objective-C 中实现它的方法。我也没有在网上找到任何人说它不能完成,所以我决定我应该问。我在文档中看到您可以从 Javascript 进行 Objective-C 调用,但我无法控制要监控的网页。所以我需要一个解决方案,让我可以完全在 Objective-C 中监听这个事件。

编辑:如果细节会有所帮助,我会尝试允许用户在 Facebook 上发布墙贴。我正在 UIWebview (http://www.facebook.com/sharer/sharer.php?u=) 中加载 Facebook 共享页面,并希望监视用户何时单击“共享链接”,以便我可以关闭 Web 视图.

感谢大家的宝贵时间!

【问题讨论】:

  • 找到解决方案了吗?
  • @user1282931 很遗憾没有。

标签: objective-c ios uiwebview event-handling


【解决方案1】:

你可以使用 UIWebViewDelegate:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

UIWebViewNavigationType 值为:

enum {
  UIWebViewNavigationTypeLinkClicked,
  UIWebViewNavigationTypeFormSubmitted,
  UIWebViewNavigationTypeBackForward,
  UIWebViewNavigationTypeReload,
  UIWebViewNavigationTypeFormResubmitted,
  UIWebViewNavigationTypeOther
};typedef NSUInteger UIWebViewNavigationType;

可以检查一下,然后查看 NSURLRequest 以获取相关信息

【讨论】:

  • 我实现了该功能,并在加载网页时调用该方法。不幸的是,单击按钮时调用它。
  • 哦,对不起,我对此有点陌生,我试图使用“enter”进入新行,但它在我准备好之前提交了评论。对不起!要继续,如果我提供有关我尝试接收事件的按钮的更多信息,也许会有所帮助。我正在尝试允许用户撰写 facebook wallpost。我正在打开 facebook 共享页面 (facebook.com/sharer/sharer.php?u=),然后想要监视何时按下“共享链接”按钮,以便我可以关闭 web 视图。否则,即使墙贴制作,它似乎也没有发生任何事情
【解决方案2】:

使用自定义方案。当用户点击按钮时,使用自定义方案 (myScheme://buttonTapped) ping 一个 url,或者:

  1. 在 webview 委托方法 shouldStartLoadWithRequest... 中捕获它(即检查 URL 是否包含您的自定义方案)并将其路由到适当的目标 c 选择器。或者

  2. 注册自定义 URL 协议并将其设置为处理您的自定义 URL 方案。类似于以下内容:

@implementation MyURLProtocol + (BOOL)canInitWithRequest:(NSURLRequest *)request { 返回 [[[请求 URL] 方案] isEqualToString:@"myScheme"]; } + (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { 退货请求; } - (void)startLoading { NSURLRequest * request = [自我请求]; id 客户 = [自我客户]; NSData * 数据 = [NSMutableData dataWithCapacity:0]; NSHTTPURLResponse * response = [[[NSHTTPURLResponse alloc] initWithURL:[request URL] statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:nil] autorelease]; [客户端 URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; [客户端 URLProtocol:self didLoadData:data]; [客户端 URLProtocolDidFinishLoading:self]; [[NSNotificationCenter defaultCenter] postNotificationName:kSchemeNotification object:nil userInfo:payload]; } - (void)stopLoading { }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多