从Cocoa中的Web视图获取源HTML

从Cocoa中的Web视图获取源HTML,cocoa,webkit,webview,macruby,Cocoa,Webkit,Webview,Macruby,我正在开发一个OSX程序,在这个程序中,用户在WebView中进行一些轻微的WYSIWYG HTML编辑。作为Cocoa和WebKit编程的新手,我完全不知道如何从WebView中获取所选文本——目的是获取用户选择的内容,在文本周围添加HTML代码(如div或span),并用修改后的代码替换所选文本。如何做到这一点 我目前正在用MacRuby编写这个项目,但我也很感谢Objective-C程序员的帮助。谢谢大家! UIWebView允许您运行任意JavaScript: [webview stri

我正在开发一个OSX程序,在这个程序中,用户在WebView中进行一些轻微的WYSIWYG HTML编辑。作为Cocoa和WebKit编程的新手,我完全不知道如何从WebView中获取所选文本——目的是获取用户选择的内容,在文本周围添加HTML代码(如div或span),并用修改后的代码替换所选文本。如何做到这一点


我目前正在用MacRuby编写这个项目,但我也很感谢Objective-C程序员的帮助。谢谢大家!

UIWebView允许您运行任意JavaScript:

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

您可以请求
WebView
-selectedDOMRange
,您将得到一个
DOMRange
对象。您可以使用此对象查找所选内容<与所有WebKit DOM对象一样,code>DOMRange是标准W3C DOMRange对象的Objective-C表示,请参阅
DOMRange.h
,了解其支持的方法/属性

然后,您可以使用
-replaceSelectionWithMarkupString:
-replaceSelectionWithText:
-replaceSelectionWithNode:
方法替换当前选择,以检索WebKit WebView的HTML内容:

[(DOMHTMLElement *)[[[webView mainFrame] DOMDocument] documentElement] outerHTML];
如果要将HTML解释为纯文本,可以使用:

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

WebView也是如此。如果您想在
WebView
中使用JavaScript,最好获得指向
WebView
windowScriptObject
属性的指针,该属性返回一个
WebScriptObject
,您可以用它来评估JavaScript。iphonesdk的UIWebView非常有限,需要使用
-stringByEvaluatingJavaScriptFromString:
,这比其他任何东西都更像是一种黑客行为WebView功能强大得多。我不想问一些其他人都知道答案的问题,但如果我想用+所选标记+替换标记,我该怎么做?在我看来,这些都表明所选标记将被销毁。您需要使用传递回您的
DOMRange
对象,并使用其方法/属性检查所选内容。HTML文档不仅仅是一个字符串,DOM可能已被动态修改,因此您必须确保使用有效的标记替换所选内容。WebKit定义了DOMRange的
-markupString
方法,但不幸的是,这可能无法满足您的需要。您可能应该构造一个有效的DOMNode结构,并插入该结构,其范围可能与您从WebView收到的范围不同。