web-dev-qa-db-ja.com

WKWebViewベースのデスクトップアプリ内でインスペクターを表示する方法は?

Macアプリ内でWKWebViewの inspector を表示する方法を探しています。

WebKit1とWebViewでは、UserDefaultsでWebKitDeveloperExtrasをtrueに設定するだけで、Macアプリ内にインスペクターを表示するのが簡単でした。これにより、すべてのWebビューに「要素の検査」メニューが表示されます。

しかし、WKWebViewを備えたWebKit2では、これはもう機能していません。 WWDC14インスペクターセッションでは、資格を追加する必要があることを説明し、Safari開発者メニューからインスペクターを表示できます。これは、開発者である場合にのみ機能します。

private headers を調べたところ、_allowsRemoteInspectionが見つかりました。これにより、どういうわけか、インスペクターを起動して接続できると思いますが、そこからどこに行くべきかわかりません。

私はこれを公式に行う方法を望んでいますが、私のアプリはAppStoreにないので、プライベートなものを使用してもかまいません。

27
Koen Bok

これはここでパッチされました: https://lists.webkit.org/pipermail/webkit-dev/2014-August/026790.html

このようなプライベートプロパティを公開するだけで使用できます。

@interface WKPreferences (WKPrivate)
@property (nonatomic, setter=_setDeveloperExtrasEnabled:) BOOL _developerExtrasEnabled;
@end

これで、右クリックで「要素の検査」メニューが表示されます。

私がまだ見つける必要がある唯一のことは、コードから直接インスペクターを表示する方法です。

6
Koen Bok

Swiftの場合、ブリッジヘッダーを作成する代わりに、直接設定できます

self.webView.configuration.preferences.setValue(true, forKey: "developerExtrasEnabled")
19
Drazen Mokic

Koenが発見したことに基づいて、このプロパティを設定するより簡単な方法は、キー値コーディングを使用することです。ブリッジングヘッダーは不要です。

迅速:

preferences.setValue(true, forKey: "developerExtrasEnabled")

またはObjective-Cでは:

[preferences setValue:@YES forKey:@"developerExtrasEnabled"];

キー値コーディングは、アンダースコアが前に付けられたプライベートのものを含め、キーに一致するメソッドとインスタンス変数を探します。

14
Patrick Smith

Koen Bokの答えに基づいて、Swiftに this Gist を付与します。これらのファイルを使用して、次の行をブリッジヘッダーに追加する必要があります。

#import "WKPreferences+DevExtras.h"

使い方は次のようになります

let webView = WKWebView(frame: window.frame)
webView.configuration.preferences.enableDevExtras();
1
Clay Bridges