【问题标题】:How to identify user-initiated request in Cocoa WebView?如何在 Cocoa WebView 中识别用户发起的请求?
【发布时间】:2012-02-08 21:33:00
【问题描述】:

我有一个基于 WebKit 的应用程序。当用户启动打开新页面的操作(例如单击链接)时,我想拦截该 URL 并选择在我的应用程序中打开它,或者将其踢出到 Safari。

理想情况下,我想识别加载序列中的第一个请求,或者直接由用户操作产生的请求。或者,如果我可以识别框架中顶级 URL 的更改可能就足够了,但需要注意的是,如果我决定将请求退回到 Safari,我需要能够取消请求。

我已经实现了 webView:decidePolicyForNavigationAction:request:frame:decisionListener,并且我可以看到在页面加载期间发出的所有请求。由用户触发的请求,以及由 Javascript、REST 调用等启动的请求。

对于简单的链接,我可以从动作信息中获取 WebActionNavigationType。但是,如果用户单击带有 Javascript onclick() 处理程序的元素,该处理程序又会导航到不同的页面,则导航类型将是“其他”,并且与所有其他 Javascript 请求无法区分(即从原始请求产生的辅助 REST 调用)请求)。

其他人解决了这个问题吗?任何指针?谢谢!

【问题讨论】:

    标签: macos cocoa webkit


    【解决方案1】:

    我想出了一些似乎对我有用的东西。在 decisionPolicyForNavigationAction 中,此测试将确定它是否是用户发起的操作:

    BOOL isUserAction = (
        [frame isEqual:[sender mainFrame]] &&
        [[request URL] isEqualTo:[actionInformation objectForKey:WebActionOriginalURLKey]]
    ); 
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多