Use [DOMRange markupString] to get selection source.

This DOMRange method, previously used in GetSelectedText(), seems to provide
exactly what we need so there doesn't seem to be any reason to use JS to get
the selection text, especially as it didn't even work under OS X 10.8 and
returned an empty string in the unit test.

The unit test still needs adjustment to pass because we don't get back exactly
the same HTML as we used originally, but with more relaxed matching it does
pass now.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74541 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-07-16 14:10:17 +00:00
parent 54889dae19
commit 75f9a95448
2 changed files with 17 additions and 10 deletions

View File

@@ -906,13 +906,11 @@ void wxWebViewWebKit::SelectAll()
wxString wxWebViewWebKit::GetSelectedSource() const wxString wxWebViewWebKit::GetSelectedSource() const
{ {
wxString script = ("var range = window.getSelection().getRangeAt(0);" DOMRange* dr = [m_webView selectedDOMRange];
"var element = document.createElement('div');" if ( !dr )
"element.appendChild(range.cloneContents());" return wxString();
"return element.innerHTML;");
NSString *result = [m_webView stringByEvaluatingJavaScriptFromString: return wxStringWithNSString([dr markupString]);
wxNSStringWithWxString(script)];
return wxStringWithNSString(result);
} }
wxString wxWebViewWebKit::GetPageText() const wxString wxWebViewWebKit::GetPageText() const

View File

@@ -220,9 +220,18 @@ void WebTestCase::Selection()
CPPUNIT_ASSERT(m_browser->HasSelection()); CPPUNIT_ASSERT(m_browser->HasSelection());
CPPUNIT_ASSERT_EQUAL("Some strong text", m_browser->GetSelectedText()); 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>strong</strong> text", // The web engine doesn't necessarily represent the HTML in the same way as
m_browser->GetSelectedSource().Lower()); // we used above, e.g. IE uses upper case for all the tags while WebKit
// under OS X inserts plenty of its own <span> 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*<strong*strong</strong>*text*")
);
m_browser->ClearSelection(); m_browser->ClearSelection();
CPPUNIT_ASSERT(!m_browser->HasSelection()); CPPUNIT_ASSERT(!m_browser->HasSelection());