Как показать инспектора в приложении WKWebView для настольных ПК?
Я ищу способ показать инспектор для WKWebView внутри моего приложения Mac.
С WebKit1 и WebView было легко показать инспектор в вашем приложении Mac, просто установив для WebKitDeveloperExtras значение true в ваших пользовательских значениях. Это даст вам меню "Проверка элемента" в каждом веб-представлении.
Но в WebKit2 с WKWebView это больше не работает. В сеансе инспектора WWDC14 они объясняют, что вам нужно добавить разрешение, и затем могут показать инспектора из меню разработчика Safari. Это работает только если вы разработчик.
Я просмотрел приватные заголовки и нашел _allowsRemoteInspection, который заставляет меня думать, что вы можете каким-то образом запустить инспектор и подключиться к нему, но я не уверен, куда идти дальше.
Хотя я надеюсь на официальный способ сделать это, мое приложение не находится в AppStore, поэтому я в порядке с использованием личных вещей.
5 ответов
Это было исправлено здесь: https://lists.webkit.org/pipermail/webkit-dev/2014-August/026790.html
Просто выставьте частную собственность вот так, и вы сможете ее использовать.
@interface WKPreferences (WKPrivate)
@property (nonatomic, setter=_setDeveloperExtrasEnabled:) BOOL _developerExtrasEnabled;
@end
Теперь вы получаете меню "Проверка элемента" по правому клику.
Единственное, что мне еще нужно выяснить, это как показать инспектора прямо из кода.
Для Swift вместо создания связующего заголовка вы можете установить его напрямую
self.webView.configuration.preferences.setValue(true, forKey: "developerExtrasEnabled")
Исходя из того, что обнаружил Коен, более простой способ установить это свойство - использовать Key Value Coding, заголовки моста не требуются.
Swift:
preferences.setValue(true, forKey: "developerExtrasEnabled")
Или в Objective-C:
[preferences setValue:@YES forKey:@"developerExtrasEnabled"];
Кодирование значения ключа будет искать методы и переменные экземпляра, которые соответствуют ключу, включая закрытые с префиксом подчеркивания.
isInspectable
Начиная с macOS Ventura (13.3
), появилось новое свойство isInspectable наWKWebView
; его включение включит инспектор. Нет необходимости полагаться на частные API илиKVO
больше.
wkWebView.isInspectable = true
Предупреждение
Однако есть предостережение: чтобы отобразить инспектор, вам нужно щелкнуть правой кнопкой мыши на веб-сайте, и в контекстном меню должна быть опцияInspect Element
. Иногда это не так, и вам необходимо открыть Веб-инспектор из Safari (в Safari должны быть включены инструменты разработчика).
Safari > Develop > [Name of your device] > [Name of your app] > [URL or title of website open with WKWebView]
Основываясь на ответе Коэна Бока, для Свифта дайте эту суть. Используя эти файлы, вам нужно добавить следующую строку в заголовок моста:
#import "WKPreferences+DevExtras.h"
Использование выглядит как
let webView = WKWebView(frame: window.frame)
webView.configuration.preferences.enableDevExtras();