如何让NSURL指向本地目录?

时间:2012-12-31 02:48:02

标签: cocoa nsurlconnection nsurlprotocol

今天阅读Adium代码,发现了一个有趣的NSURL用法:

NSURL *baseURL = [NSURL URLWithString:[NSString stringWithFormat:@"adium://%@/adium", [messageStyle.bundle bundleIdentifier]]];
[[webView mainFrame] loadHTMLString:[messageStyle baseTemplateForChat:chat] baseURL:baseURL];

我尝试记录网址并得到了这个 adium://im.adium.Smooth Operator.style/adium ,然后我创建了一个空白项目,看看如何创建这样的NSURL但是失败了。当我将loadHTMLString消息发送到我项目中的webview框架时,如果baseURL为nil,一切都很好,如果没有,我在视图中有一个空白页面。

这是我的代码,项目名称是webkit

NSURL *baseURL = [NSURL URLWithString:@"webkit://resource"];
//if baseURL is nil or [[NSBundle mainBundle] bundleURL], everything is fine
[[webView mainFrame] loadHTMLString:@"<html><head></head><body><div>helloworld</div></body></html>" 
                     baseURL: baseURL];
[frameView setDocumentView:webView];
[[frameView documentView] setFrame:[frameView visibleRect]];

问题是如何制作自定义协议而不是http://?

2 个答案:

答案 0 :(得分:1)

adium://%@ / adium ,第一部分称为协议,您还可以注册您的协议webkit:查看How to map a custom protocol to an application on the Mac?Launch Scripts from Webpage Links

答案 1 :(得分:0)

[NSURLProtocol registerClass:[AIAdiumURLProtocol class]];
[ESWebView registerURLSchemeAsLocal:@"adium"];

我试图找到adium在info.plist中定义adium架构的位置,遗憾的是,那里没有,只有一些irc / xmpp协议。

所以我终于启动了调试器,并在AIWebKitDelegate init方法中找到了上面的代码,无论如何这是另一种注册自定义协议的方式〜