2010-01-12 11 views
8

Sto lavorando a un programma OS X in cui l'utente esegue una leggera modifica HTML WYSIWYG in una WebView. Essendo nuovo alla programmazione con Cocoa e WebKit, non ho assolutamente idea di come ottenere il testo selezionato da una WebView - l'intenzione è di prendere ciò che l'utente ha selezionato, aggiungere codice HTML (come div's o span's) attorno al testo e sostituire il selezionato testo con il codice modificato. Come può essere realizzato?Ottenere l'HTML di origine da una WebView in Cocoa

Attualmente sto programmando questo progetto con MacRuby, ma apprezzerei anche l'aiuto dei programmatori Objective-C. Grazie!

risposta

3

Si può chiedere per -selectedDOMRange s' il WebView e si otterrà un oggetto DOMRange indietro. Puoi usare questo oggetto per scoprire cosa è selezionato. DOMRange, come tutti gli oggetti DOM WebKit, è una rappresentazione Objective-C di un oggetto standard W3C DOMRange, vedere DOMRange.h per quali metodi/proprietà supporta.

si può quindi sostituire la selezione corrente utilizzando i -replaceSelectionWithMarkupString:, -replaceSelectionWithText: o -replaceSelectionWithNode: metodi di WebView.

+0

Odio chiedere qualcosa che probabilmente ha una risposta ovvia a tutti gli altri, ma se volessi sostituire il markup con + il markup selezionato +, come dovrei farlo? Tutti sembrano indicarmi che il markup selezionato sarà distrutto. –

+0

È necessario utilizzare l'oggetto 'DOMRange' che viene restituito all'utente e utilizzare i relativi metodi/proprietà per ispezionare il contenuto selezionato. Un documento HTML non è solo una stringa, il DOM può essere stato modificato dinamicamente, quindi devi fare il lavoro per assicurarti di sostituire il contenuto selezionato con un markup valido. WebKit definisce il metodo '-markupString' di DOMRange, ma sfortunatamente questo probabilmente non ti darà quello che ti serve. Probabilmente dovresti costruire una struttura DOMNode valida e inserirla, possibilmente con un intervallo diverso da quello che hai ricevuto da WebView. –

5

UIWebView consente di eseguire arbitrario JavaScript:

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

così fa WebView. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/ –

+1

Se si desidera utilizzare JavaScript in 'WebView' è molto meglio ottenere un puntatore al 'Proprietà' windowScriptObject' di WebView', che restituisce un 'WebScriptObject' che è possibile utilizzare per valutare JavaScript. UIWebView di iPhone SDK è molto limitato e richiede l'uso di '-stringByEvaluatingJavaScriptFromString:' che è più di un hack che altro. 'WebView' su Mac OS X è molto più potente. –

5

Apple recommends using this snippet qui per recuperare il contenuto HTML di un WebView WebKit:

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

Se si desidera che il codice HTML interpretato come testo normale, è possibile utilizzare:

[(DOMHTMLElement *)[[[webView mainFrame] DOMDocument] documentElement] outerText]; 
Problemi correlati