Qt WebKit and HTML5 geolocation

I am learning HTML5 and testing new features in a Qt hybrid application. Now I'm working on a simple geolocation example, but when I call navigator.geolocation.getCurrentPosition (displayLocation); QtWebKit doesn't seem to support it, but according to this http://trac.webkit.org/wiki/QtWebKitFeatures22 the version of QtWebKit that ships with Qt4.8.0 does support geolocation.

This is the code Im using:

window.onload = function()
{
    getMyLocation();      
}

function getMyLocation()
{
    if(navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(displayLocation);        
    }  
    else
    {
        alert("No geolocation support");  
    }
}

function displayLocation(position)
{
    var latitude = position.coords.latitude;
    var longitude = position.coords.longitude;

    var div = document.getElementById("location");

    div.innerHTML = "You are at Latitude: " + latitude + ", Longitude: " + longitude;  
}

      

And on the Qt side:

QWebView* MyWindow::createWebView()
    {
        QWebSettings* default_settings = QWebSettings::globalSettings();
        default_settings->setAttribute(QWebSettings::JavascriptEnabled,true);
        default_settings->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled,true);
        default_settings->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled,true);
        default_settings->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls,true);        
        default_settings->setAttribute(QWebSettings::LocalStorageEnabled,true);
        default_settings->setAttribute(QWebSettings::JavascriptCanAccessClipboard,true);
        default_settings->setAttribute(QWebSettings::DeveloperExtrasEnabled,true);

        QWebView* web_view = new QWebView(this);

        connect(web_view->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),
                this, SLOT(addJavascriptObject()));

        inspector_->setPage(web_view->page());

        inspector_->setVisible(true);
        inspector_->show();

        web_view->load(QUrl("qrc:/html/geolocation_example.html"));

        return web_view;
    }

      

Does anyone know how to enable Html5 geolocation for a Qt desktop application?

+3


source to share


1 answer


You need to subclass QWebPage

and make a signal handler for the signal QWebPage::featurePermissionRequested(QWebFrame*, QWebPage::Feature)

.

Here's a reference implementation:

class WebPage : public QWebPage
{
    Q_OBJECT

    public:
        WebPage(QObject* parent = 0) :
            QWebPage(parent)
        {
            connect(this, SIGNAL(featurePermissionRequested(QWebFrame*, QWebPage::Feature)), SLOT(permissionRequested(QWebFrame*, QWebPage::Feature)));
        }

        virtual ~WebPage()
        {
        }

    private slots:
        void permissionRequested(QWebFrame* frame, QWebPage::Feature feature)
        {
            setFeaturePermission(frame, feature, PermissionGrantedByUser);
        }
};

      



Use QWebView::setPage()

with an instance of your newly created subclass so that QtWebKit uses your implementation QWebPage

.

If you need more help take a look QtMiniBrowser

, which is part of the WebKit.org repository. Source code is available here http://trac.webkit.org/browser/trunk/Tools/QtTestBrowser

+2


source







All Articles