【问题标题】:Custom NSURLProtocol not used in second webview自定义 NSURLProtocol 未在第二个 webview 中使用
【发布时间】:2012-01-11 16:02:35
【问题描述】:

我已将NSURLProtocol 子类化并使用此代码在didFinishLaunchingWithOptions 中注册:

+ (void) registerProtocol 
{
   static BOOL registered = NO;

   if (!registered) 
   {
      [NSURLProtocol registerClass:[MyURLProtocol class]];
      registered = YES;
   }
}

对于我的应用程序中的第一个UIWebView(在主窗口中),方法canInitWithRequest 被触发,我可以执行我的自定义代码。

但是我有第二个UIWebView,它在一个UIViewController 内,它在应用程序中的某个位置被推送(以模态方式呈现)。第二个UIWebView 不会调用canInitWithRequest,因此我无法执行我的自定义代码。在创建UIWebView 的两个实例之后注册协议时也是如此。

有人知道为什么吗?

[编辑] 哦!我刚刚发现它只是在第二个 webview 中加载的 javascript 中的一个简单错误:( 现在在两个 webview 中都像魅力一样工作!

【问题讨论】:

  • 问题不在于注册您的协议。您只需注册一次。我很想知道您是如何在 UIWebView 中加载您的请求的。例如,您是否正在调用 [webView loadRequest:request]。
  • 实际上该请求是从 javascript/ajax 调用中触发的,我试图在 canInitWithRequest 中拦截它。适用于第一个 webview,不适用于第二个 webview :(
  • 你能提供一些关于你发现的修复的细节吗?即使它是特定于您的应用程序的 js 错误。我遇到了同样的问题,我正在努力找出问题所在。

标签: ios uiwebview webkit nsurlprotocol


【解决方案1】:

不确定这是否与您的情况和解决方案有关,但张贴记录。经过多次试验和磨难,今天发现,如果您希望多次发送相同的 url,则 ajax 调用向目标 c 发送消息,该消息将被 NSURLProtocol 的子类拦截,应该将缓存设置为 false。像这样:

$.ajax({
       url:"atavistcommand://" + name,
       data:JSON.stringify(data),
       type:"GET",
       processData:false,
       cache:false )};

如果 cache = true 那么目标 c 将永远不会在同一 url 上接收后续请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多