【问题标题】:Getting source HTML from a WebView in Cocoa从 Cocoa 中的 WebView 获取源 HTML
【发布时间】:2010-01-12 02:48:29
【问题描述】:

我正在开发一个 OS X 程序,用户在该程序中可以在 WebView 中进行一些轻量级的 WYSIWYG HTML 编辑。作为 Cocoa 和 WebKit 编程的新手,我完全不知道如何从 WebView 中获取选定的文本 - 目的是获取用户选择的内容,在文本周围添加 HTML 代码(如 div 或 span),然后替换选定的带有修改后代码的文本。这如何实现?

我目前正在使用 MacRuby 对该项目进行编程,但我也希望得到 Objective-C 程序员的帮助。谢谢!

【问题讨论】:

    标签: cocoa webkit webview macruby


    【解决方案1】:

    Apple recommends using this snippet 在这里检索 WebKit WebView 的 HTML 内容:

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

    如果您希望将 HTML 解释为纯文本,您可以使用:

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

    【讨论】:

      【解决方案2】:

      UIWebView 让您可以运行任意 JavaScript:

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

      【讨论】:

      • 如果你想在 WebView 中使用 JavaScript,你最好获得一个指向 WebViewwindowScriptObject 属性的指针,它会返回一个 WebScriptObject,你可以用于评估 JavaScript。 iPhone SDK 的 UIWebView 非常有限,需要使用-stringByEvaluatingJavaScriptFromString:,这更像是一种黑客攻击。 WebView 在 Mac OS X 上要强大得多。
      【解决方案3】:

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

      然后您可以使用WebView-replaceSelectionWithMarkupString:-replaceSelectionWithText:-replaceSelectionWithNode: 方法替换当前选择。

      【讨论】:

      • 我不想问一些可能对其他人来说答案很明显的问题,但是如果我想用 + 选定的标记 + 替换标记,我该怎么做?这些似乎都向我表明所选标记将被销毁。
      • 您需要使用传回给您的DOMRange 对象,并使用其方法/属性来检查所选内容。 HTML 文档不仅仅是一个字符串,DOM 可能已被动态修改,因此您必须确保将所选内容替换为有效标记。 WebKit 定义了 DOMRange 的 -markupString 方法,但不幸的是,这可能无法满足您的需求。您可能应该构造一个有效的 DOMNode 结构并插入它,可能与您从 WebView 收到的范围不同。
      猜你喜欢
      • 1970-01-01
      • 2012-03-04
      • 2011-10-25
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多