Qt WebKit 和 HTML5 地理定位

Posted

技术标签:

【中文标题】Qt WebKit 和 HTML5 地理定位【英文标题】:Qt WebKit and HTML5 geolocation 【发布时间】:2012-03-25 15:27:02 【问题描述】:

我正在学习 html5 并在 Qt 混合应用程序上测试新功能。 现在我正在处理一个简单的地理定位示例,但是当我调用 navigator.geolocation.getCurrentPosition(displayLocation);貌似QtWebKit不支持,不过根据http://trac.webkit.org/wiki/QtWebKitFeatures22的说法,Qt4.8.0自带的QtWebKit版本支持地理定位。

这是我正在使用的代码:

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;  

在 Qt 方面:

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;
    

有人知道如何为 Qt 桌面应用启用 Html5 地理定位功能吗?

【问题讨论】:

【参考方案1】:

您需要继承QWebPage 并为QWebPage::featurePermissionRequested(QWebFrame*, QWebPage::Feature) 信号创建一个信号处理程序。

这是一个参考实现:

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

QWebView::setPage() 与您新创建的子类的实例一起使用,以使QtWebKit 使用您的QWebPage 实现。

如果您需要更多帮助,请查看 QtMiniBrowser,它是 WebKit.org 存储库的一部分。源代码可从这里获得http://trac.webkit.org/browser/trunk/Tools/QtTestBrowser

【讨论】:

问题是它甚至无法调用 navigator.geolocation.getCurrentPosition(displayLocation);找不到navigator.geolocation userX731,你有想过这个吗? 我尝试使用 PyQt4 实现此功能,但 featurePermissionRequested 信号似乎从未触发。

以上是关于Qt WebKit 和 HTML5 地理定位的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 Geolocation(地理定位)简介

如何使用HTML5地理位置定位功能

使用 html5 地理定位 api 创建地理围栏

html5地理定位基于啥原理

哪些网络浏览器支持通过 HTML5 进行地理定位?

地理定位 video web存储