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());