2010-01-12 7 views
8

Я работаю над программой OS X, где пользователь делает небольшое WYSIWYG-редактирование HTML в WebView. Будучи новичком в программировании с Cocoa и WebKit, я абсолютно не знаю, как получить выделенный текст из WebView - намерение взять то, что выбрал пользователь, добавить HTML-код (например, div или span) вокруг текста и заменить выбранный текст с измененным кодом. Как это можно сделать?Получение исходного HTML-кода из WebView в Cocoa

Я в настоящее время программирую этот проект с помощью MacRuby, но я был бы признателен за помощь программистов Objective-C. Спасибо!

ответ

3

Вы можете попросить -selectedDOMRangeWebView «s, и вы получите DOMRange объект обратно. Вы можете использовать этот объект, чтобы узнать, что выбрано. DOMRange, как и все объекты WebKit DOM, представляет собой представление Objective-C стандартного объекта W3C DOMRange, см. DOMRange.h о том, какие методы/свойства он поддерживает.

Затем вы можете заменить текущий выбор, используя методы -replaceSelectionWithMarkupString:, -replaceSelectionWithText: или -replaceSelectionWithNode:WebView.

+0

Мне не нравится спрашивать что-то, что, вероятно, имеет очевидный ответ для всех, но если бы я захотел заменить разметку + выбранной разметкой +, как бы я это сделал? Все, кажется, указывают мне, что выбранная разметка будет уничтожена. –

+0

Вам необходимо использовать объект DOMRange, который передается вам, и использовать его методы/свойства для проверки выбранного контента. HTML-документ - это не просто строка, DOM может быть изменена динамически, поэтому вы должны выполнить эту работу, чтобы убедиться, что вы заменяете выделенный контент на допустимую разметку. WebKit определяет метод DOMRange '-markupString', но, к сожалению, это, вероятно, не даст вам то, что вам нужно. Вероятно, вы должны создать правильную структуру DOMNode и вставить ее, возможно, с другим диапазоном, полученным от WebView. –

5

UIWebView позволяет запускать произвольный JavaScript:

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

Так же WebView. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/ –

+1

Если вы хотите использовать JavaScript в «WebView», вам гораздо лучше получить указатель на '' Свойство 'windowScriptObject' WebView', которое возвращает' WebScriptObject', который вы можете использовать для оценки JavaScript. UIWebView iPhone SDK очень ограничен и требует использования '-stringByEvaluatingJavaScriptFromString:', который больше взломан, чем что-либо еще. «WebView» на Mac OS X намного эффективнее. –

5

Apple recommends using this snippet здесь, чтобы получить содержимое HTML в виде WebKit WebView:

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

Если вы хотите, HTML интерпретируется как обычный текст, вы можете использовать:

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