How can I pop up Webkit's Web Inspector from my WebView object programmatically?
I succeed to enable Webkit's Web Inspector on my WebView. It's working well, and now I can pop it up by clicking "Inspect Element" on context menu. And I want to do this with my push button. But I couldn't find a proper way to do this. My DOM knowledge is 10 years old, very newbie on HTML DOM of nowadays. Is there any wa开发者_运维知识库y to do this?
I found a class document: InspectorController. I think this is a kind of key. But I cannot know what object exposes and how can I use this.
Environment:
- Mac OS X 10.6
- Xcode 3.2.1 (iPhone SDK, no plug-in)
Here's some code that should help you open it from cocoa programmatically:
@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];
}
}
To extend it to the dom, just expose this function to JS.
For those confused by @alex MacCaw's answer (it is c++), here is a more "normal" version..
in your .m
file... declare the WebInspector header methods..
@interface WebInspector : NSObject { WebView *_webView; }
- (id)initWithWebView:(WebView *)webView;
- (void)detach: (id)sender;
- (void)show: (id)sender;
- (void)showConsole:(id)sender;
@end
Then in that same file, be it your app delegate, or WebView subclass, or whatever... declare an ivar to "hold your inspector, and make a method to open it, using YOUR web view instance or property, or whatever. ...
@implementation AppController { WebInspector *_inspector; }
- (IBAction)showInspector:(id)x {
_inspector = _inspector = [WebInspector.alloc initWithWebView:_myWebView];
[_inspector detach:_myWebView];
[_inspector showConsole:_myWebView];
}
....
There is no public API for interacting with the WebInspector via the DOM or Cocoa. You should file an enhancement request at https://bugreport.apple.com/ asking for this API.
InspectorController is also an internal implementation detail of the WebInspector and its likely a bug that its on the documentation website.
精彩评论