2010-01-12 9 views
8

Pracuję nad programem OS X, w którym użytkownik wykonuje kilka lekkich edycji w trybie WYSIWYG HTML w WebView. Będąc nowicjuszem w programowaniu za pomocą Cocoa i WebKit, nie mam absolutnie żadnego pojęcia, jak uzyskać wybrany tekst z WebView - zamierzam wziąć to, co wybrał użytkownik, dodać kod HTML (np. Div lub span) wokół tekstu i zastąpić wybrany tekst ze zmodyfikowanym kodem. Jak to osiągnąć?Pobieranie kodu źródłowego HTML z WebView w kakao

Obecnie programuję ten projekt z MacRuby, ale doceniam też pomoc programistów Objective-C. Dziękuję Ci!

Odpowiedz

3

Można poprosić o WebView „s -selectedDOMRange i dostaniesz DOMRange obiekt powrotem. Możesz użyć tego obiektu, aby dowiedzieć się, co zostało wybrane. DOMRange, podobnie jak wszystkie obiekty WebKit DOM, to reprezentacja Objective-C standardowego obiektu DOMRange W3C, zobacz DOMRange.h dla jakich metod/właściwości obsługuje.

Następnie można zastąpić bieżące zaznaczenie metodami -replaceSelectionWithMarkupString:, -replaceSelectionWithText: lub -replaceSelectionWithNode: z WebView.

+0

Nienawidzę pytać o coś, co prawdopodobnie ma odpowiedź oczywistą dla wszystkich innych, ale gdybym chciał zastąpić znacznik z + zaznaczonym znacznikiem +, jak bym to zrobił? Wszystko wskazuje na to, że wybrany znacznik zostanie zniszczony. –

+0

Musisz użyć obiektu 'DOMRange', który jest przekazywany do ciebie i użyć jego metod/właściwości do inspekcji wybranej zawartości. Dokument HTML to nie tylko ciąg znaków, DOM mógł zostać zmodyfikowany dynamicznie, więc musisz wykonać pracę, aby upewnić się, że zastępujesz wybraną treść prawidłowym znacznikiem. WebKit definiuje metodę '-markupString' w DOMRange, ale niestety to prawdopodobnie nie da ci tego, czego potrzebujesz. Prawdopodobnie powinieneś zbudować prawidłową strukturę DOMNode i wstawić ją, prawdopodobnie z innym zakresem, niż ten, który otrzymałeś z WebView. –

5

UIWebView pozwala uruchomić arbitralne JavaScript:

[webview stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].innerHTML"] 
+3

Więc nie WebView. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/ –

+1

Jeśli chcesz używać JavaScriptu w 'WebView', zdecydowanie lepiej jest uzyskać wskaźnik do 'Właściwość' windowScriptObject' programu WebView ', która zwraca' WebScriptObject', którego można użyć do oceny JavaScript. UIWebView iPhone SDK jest bardzo ograniczony i wymaga użycia '-stringByEvaluatingJavaScriptFromString:', który jest bardziej hackowy niż cokolwiek innego. 'WebView' na Mac OS X jest o wiele potężniejszy. –

5

Apple recommends using this snippet tutaj, aby pobrać zawartość HTML w WebView WebKit:

[(DOMHTMLElement *)[[[webView mainFrame] DOMDocument] documentElement] outerHTML]; 

Jeśli chcesz HTML interpretowany jako zwykły tekst, można użyć:

[(DOMHTMLElement *)[[[webView mainFrame] DOMDocument] documentElement] outerText]; 
Powiązane problemy