Qt有一個叫QWebView的類,它是基於WebKit引擎的瀏覽器。除此之類Qt還有可以顯示HTML代碼的組件如QTextEdit等,為我們提示了豐富、實用、簡便和意想不到的功能。Qt的擴充性非常好,它可以允許你的C++代碼與網頁裡的Javascript進行互動。這裡分享一下自己使用C++執行網頁的Javascript函數的一點經驗。
調用Javascript代碼是通過QWebFrame類的evaluateJavaScript函數來實現的。下面是一個例子,我寫了一個本地的HTML檔案如下:
<html>
<head>
<script type="text/javascript" src="test.js">
</script>
</head>
<body>
<form>
<input type="button" value="Click me!" onclick="Test()" >
</form>
</body>
</html>
這個簡單的網頁有一個按鈕,點擊後調用Test函數,而Test函數是在一個test.js的Javascript檔案,檔案內容如下:
function Test() {
alert("Test");
}
function add() {
return 33;
}
建立一個工程,加入一個QWebView,初始化載入Test.html,
ui.webView->load(QUrl("test.html"));
再加入一個按鈕,為了調用Javascript,然後在按鈕點擊時就可以用C++代碼:
ui.webView->page()->mainFrame()->evaluateJavaScript("Test()");
運行後可以看到網頁彈出了一個提示框。這和在網頁裡面點擊按鈕的效果是一樣的。
附註:
如果是qt調用js函數,js函數帶參數時,要多注意, 在qt裡該函數調用方法要寫成:
QString method = QString("jsFunction(\"%1\", \"%2\")").arg(param1).arg(param2);
m_web_view->page()->mainFrame()->evaluateJavaScript(method);
參數兩邊的引號必不可少,而且要轉義符轉義。