1

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

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

我试图记录 url 并得到这个adium://im.adium.Smooth Operator.style/adium,然后我创建了一个空白项目来查看如何创建这样的 NSURL 但失败了。当我向项目中的 webview 框架发送 loadHTMLString 消息时,如果 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://?

4

2 回答 2

1

adium://%@/adium,第一部分称为协议,您也可以注册您的协议 webkit:看看如何将自定义协议映射到 Mac 上的应用程序?从网页链接启动脚本

于 2012-12-31T06:59:12.817 回答
0
[NSURLProtocol registerClass:[AIAdiumURLProtocol class]];
[ESWebView registerURLSchemeAsLocal:@"adium"];

我试图找到 adium 在 info.plist 中定义 adium 模式的位置,不幸的是,那里什么都没有,只有一些 irc/xmpp 协议。

于是我终于启动了调试器,在AIWebKitDelegate的init方法中找到了上面的代码,反正这是另一种注册自定义协议的方式~

于 2013-01-01T11:39:35.580 回答