Это не будет легко: веб-браузеры являются крепостями из-за проблем безопасности. Так что довольно трудно получить от JS на веб-странице чего-то за пределами браузера.
Также Qtwebkit не очень открытый API. Самым большим препятствием в вашем случае является то, что он не предлагает вам доступа к DOM, поэтому вы можете заменить только весь HTML.
Следовательно, вам нужно будет исправить и написать много кода для реализации пропущенных API и функций.
Поскольку qt 4.6 был выпущен, есть Qwebelement ( см. Документы для примеров), поэтому вы можете хотя бы получить доступ к DOM и изменить его. Это сделает много вещей проще. Я предлагаю решить, кто контролирует браузер: будет ли ваше приложение JavaScript, которое звонит снаружи или является приложением действительно в C ++, и вы используете браузер в качестве Smart UI Renderer?
Гораздо простым способом, чтобы сделать вашу идею Было бы начать внутренний веб-сервер, когда ваше приложение запускается, а затем открыть вид QTWebkit, указывая на URL локального сервера. Затем вы можете использовать все стандартные инструменты веб-разработки. Eclipse использует эту технику для его внутренней справочной системы.
Это может помочь:
http://labs.trolltech.com/blogs/2009/04/07/qwebelement-sees-the-light-do-i-hear- -Боякаша /
http://labs.trolltech.com/blogs/2009/04/17/jquery-and-qwebelement/
Для базового использования примеры от Trolltech должны запускаться.
Плюс-сторона подхода QT заключается в том, что выяснение объектов к скрипту относительно легко, см. E.G. здесь . JavaScript в различных встроенных этикетах может затем легко взаимодействовать с C ++ (и, конечно, со сценарием в других окнах, если вы предоставляете поддержку на стороне C ++ для этого). Внизу состоит в том, что API, похоже, еще не совсем стабилен и, похоже, отсутствует поддержка для добавления слушателей событий от JavaScript на объекты C ++ (или, по крайней мере, я не видел, как это должно было сделать).
Размещение пользовательских нарисованных элементов на страницу снова вполне упрощена, вы встраиваете плагины на страницу (например, через <объект>
тег) и возврата пользовательских qwidgets из QWebPlugInfactory :: Create () .
На важной веществе, чтобы всегда иметь в виду: призывы к встроенному webkit (например, для оценки JavaScript) всегда должны происходить на главной ните.
Я копирую/вставляю кусочки из разных разделов, но вот как я вставляю объект, доступный для javascript, затем я использую javascript для общения с главным приложением. Кажется, работает хорошо...
void MyApi::setWebView( QWebView *view ) {
QWebPage *page = view->page();
m_frame = page->mainFrame();
attachObject();
connect( m_frame, SIGNAL(javaScriptWindowObjectCleared()),
this, SLOT(attachObject()) );
}
void MyApi::attachObject() {
m_frame->addToJavaScriptWindowObject( QString("MyApi"), this );
}
Это делает объект MyApi
существующим в javascript, и я могу вызывать любые слоты, доступные из класса MyApi
.