Как показать инспектора в приложении 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();
Другие вопросы по тегам