8

如何以编程方式从我的 WebView 对象中弹出 Webkit 的 Web Inspector?

我成功在我的 WebView 上启用了 Webkit 的 Web Inspector 。它运行良好,现在我可以通过单击上下文菜单上的“检查元素”来弹出它。我想用我的按钮来做到这一点。但我找不到合适的方法来做到这一点。我的 DOM 知识已有 10 年的历史,是当今 HTML DOM 的新手。有没有办法做到这一点?

我找到了一个类文档:InspectorController。我认为这是一种关键。但我不知道暴露了什么对象以及如何使用它。

环境:

  • Mac OS X 10.6
  • Xcode 3.2.1(iPhone SDK,无插件)
4

3 回答 3

11

这里有一些代码可以帮助您以编程方式从可可打开它:

@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。

于 2010-01-26T19:21:01.933 回答
5

对于那些对@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 以“持有您的检查器,并使用您的 Web 视图实例或属性或其他任何方法来打开它。.. ..

@implementation AppController  { WebInspector *_inspector; }

- (IBAction)showInspector:(id)x {
   _inspector = _inspector = [WebInspector.alloc initWithWebView:_myWebView];
  [_inspector      detach:_myWebView];
  [_inspector showConsole:_myWebView];
}
....
于 2013-10-31T06:15:27.623 回答
3

没有用于通过 DOM 或 Cocoa 与 WebInspector 交互的公共 API。您应该在https://bugreport.apple.com/提交增强请求,要求提供此 API。

InspectorController 也是 WebInspector 的内部实现细节,它可能是文档网站上的一个错误。

于 2010-01-24T00:54:46.633 回答