今天阅读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://?
答案 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方法中找到了上面的代码,无论如何这是另一种注册自定义协议的方式〜