2010-01-12 27 views
8

Tôi đang làm việc trên một chương trình OS X, nơi người dùng thực hiện một số chỉnh sửa HTML WYSIWYG nhẹ trong một WebView. Là người mới lập trình với Cocoa và WebKit, tôi hoàn toàn không biết cách lấy văn bản đã chọn từ WebView - ý định lấy nội dung người dùng đã chọn, thêm mã HTML (như div hoặc span) quanh văn bản và thay thế văn bản với mã được sửa đổi. Làm thế nào điều này có thể được thực hiện?Lấy HTML nguồn từ một WebView trong Cocoa

Tôi hiện đang lập trình dự án này với MacRuby, nhưng tôi cũng đánh giá cao sự trợ giúp của các lập trình viên mục tiêu-C. Cảm ơn bạn!

Trả lời

3

Bạn có thể yêu cầu cho 's WebView-selectedDOMRange và bạn sẽ nhận được một đối tượng DOMRange lại. Bạn có thể sử dụng đối tượng này để tìm ra những gì được chọn. DOMRange, giống như tất cả các đối tượng DOM WebKit, là một đại diện Objective-C của đối tượng W3C DOMRange tiêu chuẩn, xem DOMRange.h cho các phương thức/thuộc tính mà nó hỗ trợ.

Sau đó, bạn có thể thay thế lựa chọn hiện tại bằng các phương thức -replaceSelectionWithMarkupString:, -replaceSelectionWithText: hoặc -replaceSelectionWithNode: của WebView.

+0

Tôi ghét hỏi điều gì đó có thể có câu trả lời rõ ràng cho mọi người khác, nhưng nếu tôi muốn thay thế đánh dấu bằng + đánh dấu đã chọn +, tôi sẽ làm như thế nào? Tất cả những điều đó dường như chỉ ra cho tôi rằng đánh dấu đã chọn sẽ bị hủy. –

+0

Bạn cần sử dụng đối tượng 'DOMRange' được truyền lại cho bạn và sử dụng các phương thức/thuộc tính của nó để kiểm tra nội dung được chọn. Tài liệu HTML không chỉ là một chuỗi, DOM có thể đã được sửa đổi động, do đó bạn phải thực hiện công việc để đảm bảo rằng bạn đang thay thế nội dung đã chọn bằng đánh dấu hợp lệ. WebKit định nghĩa phương thức '-markupString' của DOMRange, nhưng tiếc là điều này có thể sẽ không cung cấp cho bạn những gì bạn cần. Bạn có lẽ nên xây dựng một cấu trúc DOMNode hợp lệ và chèn nó, có thể với một phạm vi khác với phạm vi bạn nhận được từ WebView. –

5

UIWebView cho phép bạn chạy tùy ý JavaScript:

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

Vì vậy, hiện WebView. http://developer.apple.com/mac/library/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/ –

+1

Nếu bạn muốn sử dụng JavaScript trong 'WebView', bạn sẽ tốt hơn khi nhận con trỏ đến Thuộc tính 'windowScriptObject' của' WebView' trả về một 'WebScriptObject' mà bạn có thể sử dụng để đánh giá JavaScript. UIWebView của SDK của iPhone rất hạn chế và yêu cầu sử dụng '-stringByEvaluatingJavaScriptFromString:' đó là phần mềm hack nhiều hơn bất kỳ thứ gì khác. 'WebView' trên Mac OS X mạnh hơn rất nhiều. –

5

Apple recommends using this snippet đây để lấy nội dung HTML của một WebView WebKit:

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

Nếu bạn muốn HTML hiểu là văn bản đơn giản, bạn có thể sử dụng:

[(DOMHTMLElement *)[[[webView mainFrame] DOMDocument] documentElement] outerText]; 
Các vấn đề liên quan