QWebview中的ASP C#ReferenceError:找不到变量:__ doPostBack

时间:2012-04-07 15:36:34

标签: c# asp.net qt

我有一个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&amp;t=634620415787187500" type="text/javascript"></script>     

<script src="/WebResource.axd?d=DdW0uiyAuuGdWry5vh688blGu469tAdCL02O1-uMuQ7WCcdxWTgtx1qSJXS805TR_p-eVWwzngMHVSRhWJ38YMOVSNZpoMbjwd3j6hGB3eg1&amp;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服务器以返回与用户代理无关的完整页面?

谢谢

0 个答案:

没有答案