PDA

View Full Version : QWebPage createWindow! When I set body onload=window.open…, window.open return undefi



allenchang
13th January 2013, 18:36
I want to rewrite QWebPage *createWindow(QWebPage::WebWindowType type) to get the open event, but when the page is like below it not work. document.write write “unfined”. If I call the function on a button’s click event, it works well. what’s wrong with qtwebkit? Is there some settings needed to be set? Html code

<body onload = myopen()>
<script>
function myopen(){
win = window.open('http://www.baidu.com');
document.write(win);
}
</script>
<input value="click" type="button" ></input>
</body>




C code is like below //main.cpp:

class webPage : public QWebPage
{
Q_OBJECT
public:
explicit webPage(QObject *parent = 0);

protected:
QWebPage *createWindow(QWebPage::WebWindowType type)
{
QWebView *wv = new QWebView;
if (type == QWebPage::WebModalDialog)
wv->setWindowModality(Qt::ApplicationModal);
return wv->page();
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWebView view;
view.settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
view.settings()->setAttribute(QWebSettings::JavascriptCanOpenWindow s, true);
view.setPage(new WebPage);
view.load(QUrl("file:///<path-to-html>"));
view.show();
return a.exec();
}

ChrisW67
14th January 2013, 00:26
There's nothing wrong with webkit. Your code was not displaying a new view (i.e. never called show()). Here is a working example with the new windows logic in the view not page.



#include <QtGui>
#include <QWebPage>
#include <QWebView>
#include <QDebug>

class WebView: public QWebView
{
Q_OBJECT
public:
WebView(QWidget *p = 0): QWebView(p)
{
}

QWebView *createWindow(QWebPage::WebWindowType type)
{
QWebView *webView = new QWebView;
QWebPage *newWeb = new QWebPage(webView);
if (type == QWebPage::WebModalDialog)
webView->setWindowModality(Qt::ApplicationModal);
webView->setAttribute(Qt::WA_DeleteOnClose, true);
webView->setPage(newWeb);
webView->show();

return webView;
}
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

WebView view;
view.settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
view.settings()->setAttribute(QWebSettings::JavascriptCanOpenWindow s, true);

QUrl url = QUrl::fromLocalFile("/tmp/tt/test.html");
view.load(url);
view.show();

return a.exec();
}
#include "main.moc"

allenchang
14th January 2013, 07:07
thank you for your reply, it works well! ah... I want to know how to reimplement QWebPage::createWindow to capture the open event!