从Cocoa中的Web视图获取源HTML
我正在开发一个OSX程序,在这个程序中,用户在WebView中进行一些轻微的WYSIWYG HTML编辑。作为Cocoa和WebKit编程的新手,我完全不知道如何从WebView中获取所选文本——目的是获取用户选择的内容,在文本周围添加HTML代码(如div或span),并用修改后的代码替换所选文本。如何做到这一点从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
我目前正在用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:
,这比其他任何东西都更像是一种黑客行为DOMRange
对象,并使用其方法/属性检查所选内容。HTML文档不仅仅是一个字符串,DOM可能已被动态修改,因此您必须确保使用有效的标记替换所选内容。WebKit定义了DOMRange的-markupString
方法,但不幸的是,这可能无法满足您的需要。您可能应该构造一个有效的DOMNode结构,并插入该结构,其范围可能与您从WebView收到的范围不同。