我有一个ASP网站正在运行,必须在Qt中编写一个浏览器才能显示它。该网站包含一个带有autoGeneratedSelectButton的网格视图。
在OSX上的IE和Safari中工作正常,在QWebview中我在检查器中得到错误:ReferenceError:找不到变量:__ doPostBack并没有任何反应。我在QWebview中启用了javascript。当我在QWebview中查看网页源代码时,缺少javascript部分,在其他浏览器中它就在那里。
任何想法如何解决这个问题?
提前致谢
我做了一些进一步的调试并测试了QWebView中的所有类型设置但没有成功。在Safari和其他浏览器中,自动生成的Javascript部分带有__doPostBack,在页面LoadFinished之后的QWebView中没有。这是缺失的部分:
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/WebResource.axd?d=4Zhe1C9agjkKahcHJlFBJf_5-2s7Big2Z0wRWA4FJsC5iPWkdqwtMfNIZdWxGKd3GaViNyI8oUNS81Rdb1LA7zAohIETcmGI8Gam3PETT6M1&t=634620415787187500" type="text/javascript"></script>
<script src="/WebResource.axd?d=DdW0uiyAuuGdWry5vh688blGu469tAdCL02O1-uMuQ7WCcdxWTgtx1qSJXS805TR_p-eVWwzngMHVSRhWJ38YMOVSNZpoMbjwd3j6hGB3eg1&t=634620415787187500" type="text/javascript"></script>
我只是不知道是否必须在ASP网站或Qt中更改某些内容。随着Qt我现在工作了好几年,对ASP来说我很新。
仍然希望有人能有解决方案,谢谢
UPDATE2: 以下是巨魔的答案:
问题不在QWebkit中,因为服务器没有在其回复中返回脚本。 我修改了fancybrowser示例,它返回一个不同的用户代理(firefox),在这种情况下它工作正常(请查看附件的来源了解详情)。 是否可以设置服务器,使其始终返回相同的内容,而不依赖于用户代理? 或者可以在代码中伪造用户代理吗?
代码更改就是这样:
class MyWebPage : public QWebPage {
public:
MyWebPage()
{
QWebPage::QWebPage();
}
QString userAgentForUrl(const QUrl &url ) const
{
return QString("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.18) Gecko/20110628 Ubuntu/10.04 (lucid) Firefox/3.6.18");
}
};
最后是那个班级的召唤:
MyWebPage* page = new MyWebPage();
page->mainFrame()->load(url);
view = new QWebView(this);
view->setPage(page);
这现在正在运作,所以它几乎在这里解决了,问题就在于:
如何设置ASP服务器以返回与用户代理无关的完整页面?
谢谢