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上のアプリケーションにマップする方法をご覧ください。Webページのリンクからスクリプトを起動します

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

info.plist で adium が adium スキーマを定義した場所を見つけようとしましたが、残念ながらそこには何もありません。一部の irc/xmpp プロトコルだけです。

ついにデバッガーを起動し、AIWebKitDelegate init メソッドで上記のコードを見つけました。とにかく、これは自己定義プロトコルを登録する別の方法です〜

于 2013-01-01T11:39:35.580 に答える