2010-01-10 6 views
8

Jak można programowo uruchomić pop-up Webkitera z mojego obiektu WebView?Jak można programowo uruchomić pop-up Webkit Web Inspector z mojego obiektu WebView?

Udaje mi się to enable Webkit's Web Inspector na moim WebView. Działa dobrze, a teraz mogę go otworzyć, klikając "Sprawdź element" w menu kontekstowym. I chcę to zrobić za pomocą mojego przycisku. Ale nie mogłem znaleźć odpowiedniego sposobu na zrobienie tego. Moja wiedza na temat DOM to 10 lat, bardzo nowicjusz na HTML DOM w dzisiejszych czasach. Czy jest jakiś sposób to zrobić?

Znalazłem dokument klasy: InspectorController. Myślę, że to jest klucz. Ale nie mogę wiedzieć, co eksponuje obiekt i jak mogę tego użyć.

Środowisko:

  • Mac OS X 10.6
  • Xcode 3.2.1 (iPhone SDK, nie plug-in)

Odpowiedz

3

Nie ma publicznego API do interakcji z WebInspector poprzez DOM lub Cocoa. Powinieneś złożyć wniosek o ulepszenie pod numerem https://bugreport.apple.com/ z zapytaniem o ten interfejs API.

InspectorController jest również wewnętrznym szczegółem implementacji WebInspector i prawdopodobnie błędem, który znajduje się na stronie dokumentacji.

11

Oto niektóre kodu, który powinien pomóc otworzyć go z kakao programowo:

@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]; 
    } 
} 

Aby przedłużyć go do dom, tylko narazić tej funkcji do JS.

+0

Przykro mi, ale nie rozumiem, jak mogę zastosować ten kod do mojego programu. Wygląda jak C++, ale nie jestem dobry w C++. – Eonil

+0

@Eonil. Wiem, że to jest stare, ale ... Powyższy kod jest oparty na frameworku Cocoa i jest napisany w Objective-C. –

+0

@Old Oh dzięki za komentowanie. Byłem również początkującym w Objective-C. Teraz mogę zrozumieć wszystkie powyższe kody. Jeszcze raz dziękuję :) – Eonil

5

Dla tych mylić odpowiedź @alex MacCaw za (jest to C++), tutaj jest bardziej "normalna" wersja ..

w pliku .m ... zadeklarować metody nagłówka WebInspector ..

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

Następnie w tym samym pliku, czy to delegat aplikacji, czy podklasa WebView, lub , niezależnie od tego, co ... zadeklaruj ivar, aby "zatrzymał inspektora i zrobił metodę, aby go otworzyć, używając TWOJej instancji lub właściwości widoku sieciowego lub cokolwiek innego ...

@implementation AppController { WebInspector *_inspector; } 

- (IBAction)showInspector:(id)x { 
    _inspector = _inspector = [WebInspector.alloc initWithWebView:_myWebView]; 
    [_inspector  detach:_myWebView]; 
    [_inspector showConsole:_myWebView]; 
} 
.... 
+0

Chciałbym, aby inspektor sieci wyświetlał się w swoim własnym oknie, zakładam, że to, co ma zrobić "odłączenie" .Jeśli spojrzeć na [źródło] (http://www.opensource.apple.com/source/ WebKit/WebKit-7534.48.3/win/WebInspector.cpp), detach nic nie robi. Jakieś pomysły, jak to osiągnąć? – bkant

Powiązane problemy