使用asp.net scriptmanager在webview中加载网站时,jquery document.ready没有触发

时间:2012-11-02 12:33:25

标签: jquery asp.net uiwebview webview scriptmanager

我已经在asp.net 4中为客户构建了一个网站,该网站使用了jQuery(1.7.2)。该网站适用于所有现代浏览器,移动客户端等。

客户有一个Twitter帐户用于他的业务,当有人关注他们时,他们会收到包含指向该网站的链接的自动回复消息。他提出了一个问题,当客户使用iOS设备上的Twitter应用点击该链接时,该网站无法正常工作。

我已经确定了Twitter使用webview来显示网站而不是safari的事实,当我尝试通过javascript获取asp.net scriptmanager实例时,在这个webview中似乎有某种错误文档永远不会准备好所以没有更多jQuery document.ready事件激发!如果我将后续脚本放在window.load中,那么它们可以正常工作。

我创建了一个非常简单的页面来测试它,它的整体看起来像这样:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
    </head>
    <body>
        <form id="form1" runat="server">

            <asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>

            <script type="text/javascript">

                $(document).ready(function () {
                    if (typeof (Sys) === "object") {
                        var manager = Sys.WebForms.PageRequestManager.getInstance();
                    }
                });

                $(document).ready(function () {
                    alert("staging1");
                });
                $(window).load(function () {
                    alert("staging2");
                });
            </script>
        </form>
    </body>
</html>

因此,如果我在webview中加载该页面,我只会从window.load中获取第二个警报。如果我拿出声明变量manager的行。我得到了两个警报作为第二个文件。已经发生事件。

如果我在任何浏览器中运行该页面,我总会得到两个警报。

有没有人遇到这个或有任何理由说这不起作用?

非常欢迎任何帮助/专业知识!

由于

2 个答案:

答案 0 :(得分:3)

你必须这样做:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>

     <script type="text/javascript">

    $(document).ready(function() {
        if (typeof (Sys) === "object") {
        var manager = Sys.WebForms.PageRequestManager.getInstance();
        }
    });

         $(document).ready(function () {
             alert("staging1");
         });
         $(window).load(function () {
             alert("staging2");
         });
    </script>
</head>
<body>
    <form id="form1" runat="server">

    <asp:ScriptManager ID="sm" runat="server"></asp:ScriptManager>

    </form>
</body>
</html>

答案 1 :(得分:0)

如果有人遇到同样的问题...请参阅微软运行时中没有正确识别webview浏览器的错误,因此不提供任何Javascript。我按照本文中的解决方案进行操作,现在工作正常...... http://connect.microsoft.com/VisualStudio/feedback/details/631438/asp-net-4-0-issue-with-browsercap-incorrectly-detecting-safari