diff --git a/src/osx/webview_webkit.mm b/src/osx/webview_webkit.mm
index 17f273603c..59617c81cf 100644
--- a/src/osx/webview_webkit.mm
+++ b/src/osx/webview_webkit.mm
@@ -906,13 +906,11 @@ void wxWebViewWebKit::SelectAll()
wxString wxWebViewWebKit::GetSelectedSource() const
{
- wxString script = ("var range = window.getSelection().getRangeAt(0);"
- "var element = document.createElement('div');"
- "element.appendChild(range.cloneContents());"
- "return element.innerHTML;");
- NSString *result = [m_webView stringByEvaluatingJavaScriptFromString:
- wxNSStringWithWxString(script)];
- return wxStringWithNSString(result);
+ DOMRange* dr = [m_webView selectedDOMRange];
+ if ( !dr )
+ return wxString();
+
+ return wxStringWithNSString([dr markupString]);
}
wxString wxWebViewWebKit::GetPageText() const
diff --git a/tests/controls/webtest.cpp b/tests/controls/webtest.cpp
index 6e7bd6da4c..fbb1bcd2ca 100644
--- a/tests/controls/webtest.cpp
+++ b/tests/controls/webtest.cpp
@@ -220,9 +220,18 @@ void WebTestCase::Selection()
CPPUNIT_ASSERT(m_browser->HasSelection());
CPPUNIT_ASSERT_EQUAL("Some strong text", m_browser->GetSelectedText());
- //We lower case the result as ie returns tags in uppercase
- CPPUNIT_ASSERT_EQUAL("some strong text",
- m_browser->GetSelectedSource().Lower());
+
+ // The web engine doesn't necessarily represent the HTML in the same way as
+ // we used above, e.g. IE uses upper case for all the tags while WebKit
+ // under OS X inserts plenty of its own tags, so don't test for
+ // equality and just check that the source contains things we'd expect it
+ // to.
+ const wxString selSource = m_browser->GetSelectedSource();
+ WX_ASSERT_MESSAGE
+ (
+ ("Unexpected selection source: \"%s\"", selSource),
+ selSource.Lower().Matches("*some**text*")
+ );
m_browser->ClearSelection();
CPPUNIT_ASSERT(!m_browser->HasSelection());