2010-01-12 10 views
8

Estoy trabajando en un programa OS X donde el usuario realiza una edición WYSIWYG HTML ligera en una WebView. Siendo nuevo en la programación con Cocoa y WebKit, no tengo ni idea de cómo obtener el texto seleccionado de un WebView: la intención es tomar lo que el usuario seleccionó, agregar código HTML (como div's o span's) alrededor del texto y reemplazar el seleccionado texto con el código modificado. ¿Cómo se puede lograr esto?Obtención de HTML fuente desde una WebView en Cocoa

Actualmente estoy programando este proyecto con MacRuby, pero también agradecería la ayuda de los programadores de Objective-C. ¡Gracias!

Respuesta

3

Puede solicitar -selectedDOMRange la WebView 's y obtendrá un objeto DOMRange espalda. Puede usar este objeto para averiguar qué se selecciona. DOMRange, como todos los objetos DOM de WebKit, es una representación de Objective-C de un objeto DOMRange W3C estándar, consulte DOMRange.h para conocer qué métodos/propiedades admite.

continuación, se puede reemplazar la selección actual utilizando las -replaceSelectionWithMarkupString:, -replaceSelectionWithText: o -replaceSelectionWithNode: métodos de WebView.

+0

Odio preguntar algo que probablemente tenga una respuesta obvia para todos los demás, pero si quisiera reemplazar el marcado con + el marcado seleccionado +, ¿cómo lo haría? Esos todos parecen indicarme que el marcado seleccionado será destruido. –

+0

Debe utilizar el objeto 'DOMRange' que le es devuelto y usar sus métodos/propiedades para inspeccionar el contenido que se selecciona. Un documento HTML no es solo una cadena, el DOM puede haberse modificado dinámicamente, por lo que debe hacer el trabajo para asegurarse de que está reemplazando el contenido seleccionado con un marcado válido. WebKit define el método '-markupString' de DOMRange, pero desafortunadamente esto probablemente no le dará lo que necesita. Probablemente deberías construir una estructura DOMNode válida e insertarla, posiblemente con un rango diferente al que recibiste de WebView. –

5

UIWebView le permite ejecutar código JavaScript arbitrario:

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

lo mismo ocurre con WebView. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/ –

+1

Si desea utilizar JavaScript en 'WebView', es mucho mejor que obtenga un puntero al La propiedad 'windowScriptObject' de' WebView', que devuelve un 'WebScriptObject' que puede usar para evaluar JavaScript. El UIWebView del iPhone SDK es muy limitado y requiere el uso de '-stringByEvaluatingJavaScriptFromString:' que es más un hack que cualquier otra cosa. 'WebView' en Mac OS X es mucho más poderoso. –

5

Apple recommends using this snippet aquí para recuperar el contenido HTML de una vista web WebKit:

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

Si desea que el HTML interpretado como texto sin formato, puede utilizar:

[(DOMHTMLElement *)[[[webView mainFrame] DOMDocument] documentElement] outerText]; 
Cuestiones relacionadas