Как программно открыть Web-инспектор Webkit из моего объекта WebView? - PullRequest
8 голосов
/ 10 января 2010

Как программно вызвать Webkit Web Inspector из моего объекта WebView?

Мне удалось включить Webkit Web Inspector в моем WebView. Он работает хорошо, и теперь я могу открыть его, нажав «Проверить элемент» в контекстном меню. И я хочу сделать это с моей кнопкой. Но я не мог найти правильный способ сделать это. Мое знание DOM - 10 лет, очень новичок в HTML DOM в наши дни. Есть ли способ сделать это?

Я нашел документ класса: InspectorController . Я думаю, что это своего рода ключ. Но я не могу знать, что объект выставляет и как я могу использовать это.

Окружающая среда:

  • Mac OS X 10,6
  • Xcode 3.2.1 (iPhone SDK, без плагина)

Ответы [ 3 ]

11 голосов
/ 26 января 2010

Вот код, который должен помочь вам открыть его из какао программно:

@interface WebInspector : NSObject
{
    WebView *_webView;
}
- (id)initWithWebView:(WebView *)webView;
- (void)detach:(id)sender;
- (void)show:(id)sender;
- (void)showConsole:(id)sender;
@end

void MyWebKit::ShowInspector(bool console){
  if ( !m_webView )
      return;

  if( !m_inspector ){
    m_inspector = [[WebInspector alloc] initWithWebView:m_webView];
    [m_inspector detach:m_webView];
  }

  if(console){
    [m_inspector showConsole:m_webView];
  }
  else {
    [m_inspector show:m_webView];
  }
}

Чтобы распространить его на dom, просто предоставьте эту функцию JS.

5 голосов
/ 31 октября 2013

Для тех, кто смущен ответом @alex MacCaw (это c ++), вот более «нормальная» версия ..

в вашем .m файле ... объявите методы заголовка WebInspector ..

@interface WebInspector : NSObject  { WebView *_webView; }
- (id)initWithWebView:(WebView *)webView;
- (void)detach:     (id)sender;
- (void)show:       (id)sender;
- (void)showConsole:(id)sender;
@end

Затем в этом же файле, будь то делегат вашего приложения, или подкласс WebView, или независимо от того, ... объявите ivar для «удержания инспектора» и создайте метод для его открытия, используя ВАШ веб просмотреть экземпляр или свойство, или что-то еще ... ...

@implementation AppController  { WebInspector *_inspector; }

- (IBAction)showInspector:(id)x {
   _inspector = _inspector = [WebInspector.alloc initWithWebView:_myWebView];
  [_inspector      detach:_myWebView];
  [_inspector showConsole:_myWebView];
}
....
3 голосов
/ 24 января 2010

Нет общедоступного API для взаимодействия с WebInspector через DOM или Cocoa. Вы должны подать запрос на улучшение на https://bugreport.apple.com/ с просьбой об этом API.

InspectorController также является внутренней деталью реализации WebInspector и, скорее всего, является ошибкой на веб-сайте документации.

...