Fra*_*y I 7 cocoa webkit nsurlprotocol
我有一个使用WebKit WebView的应用程序,我想将使用自定义URL协议加载到此WebView中的URL映射到不同的HTTP URL.例如,假设我正在加载:
定制://路径/到/资源
我想在内部实际加载:
http://something-else.com/path/to/resource
换句话说,自定义协议几乎用作速记.但我不能使用-webView:resource:willSendRequest:redirectResponse:fromDataSource :,因为我希望WebKit实际上相信这是有问题的URL,而不是简单地从一个重定向到另一个.
到目前为止,我一直在尝试使用自定义NSURLProtocol子类.然而,这比我最初想的要复杂,因为至少根据我的理解,我将不得不在NSURLProtocol子类'startLoading方法中进行实际加载.我想要一种方法将工作交给现有的HTTP协议加载器,但我找不到一种简单的方法来做到这一点.
有没有人对此提出建议,或者可能是另一种解决此问题的方法?
谢谢!
我使用策略委托。它有一些缺点,但它很简单并且足以满足我的需求。我做了这样的事情:
- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id < WebPolicyDecisionListener >)listener;
{
if ([request.URL.scheme isEqualToString:@"custom"]) {
// do something interesting
// like force the webview to load another URL
[listener ignore];
return;
}
[listener use];
}
Run Code Online (Sandbox Code Playgroud)
为了我的使用,我还需要停止 JS 事件的传播。因此,我通常将 URL 放置在调用 window.event.stopPropagation(); 的 onclick 事件处理程序中。设置location.href后。
它不是很花哨,但它是一种非常灵活且非常简单的将 JS 事件传递给 cocoa 的方法。
| 归档时间: |
|
| 查看次数: |
3098 次 |
| 最近记录: |