c# - 尝试将外部网页加载到框架/对话框中

标签 c# jquery css asp.net jquery-ui

我一直在尝试在 Jquery 对话框中加载外部网页。我已经尝试过 iFrame,但现在许多网站与 iFrame 不兼容。我能够获取外部页面的内容,但现在能够使用 jQuery 将其加载到 div 中。它抛出错误:对象不支持属性或方法“对话框” 但是,如果我用自己的字符填充 div,然后使用对话框属性,一切正常。这是我的代码。如果有人可以指导,将不胜感激

aspx 页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <%--<script src="Scripts/jquery-1.5.2.min.js" type="text/javascript"></script>--%>
    <script src="http://code.jquery.com/jquery-1.9.1.js" type="text/javascript"></script>
    <script type="text/javascript" language="javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
    <link rel="stylesheet" type="text/css" href="JQ/jquery-ui.css">
    <style type="text/css">
        body {
            font: normal normal normal 10px/1.5 Arial, Helvetica, sans-serif;
        }

        .ui-dialog-osx {
            -moz-border-radius: 0 0 8px 8px;
            -webkit-border-radius: 0 0 8px 8px;
            border-radius: 0 0 8px 8px;
            border-width: 0 8px 8px 8px;
        }
    </style>
    <script type="text/javascript">
        $(document).ready(function () {
            var Button1 = $("#Button1");
            var Button2 = $("#Button2");
            var Panel1 = $("#Panel1");
            var dil = $("#dialog");
            Button1.click(function (e) {
                //Panel1.slideDown();
                alert("in");
                //dil.css("visibility", "visible");
                dil.show();
                e.preventDefault();
                $("#dialog").dialog({
                    modal: true,
                    draggable: false,
                    resizable: false,
                    position: ['right', 'bottom'],
                    show: 'blind',
                    hide: 'blind',
                    width: 500,
                    dialogClass: 'ui-dialog-osx'
                    //overflow: auto
                    //buttons: [{
                    //    text: "I've read and understand this", click: function (event, ui) {
                    //        $(this).dialog().dialog("close");
                    //    }
                    //}]
                })
            });

            Button2.click(function (e) {
                Panel1.slideUp();
                e.preventDefault();
            });

        });
    </script>

</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Show Panel" />
            <asp:Button ID="Button2" runat="server" Text="Hide Panel" />
            <asp:Button ID="Button3" runat="server" Text="btnHTML" OnClick="Button3_Click" />
            <br />
            <br />

            <asp:Panel runat="server" ID="Panel1" Height="185px" Width="320px" Style="display: none;"
                BackColor="#FFFF99" BorderColor="Black" BorderStyle="Solid" BorderWidth="2px">
                Hello World!
            </asp:Panel>
        </div>
        <div id="dialog" runat="server" style="display:none" title="Important information">            
        </div>        
    </form>
</body>
</html>

aspx.cs

protected void Button3_Click(object sender, EventArgs e)
    {
        WebClient objWebClient = new WebClient();
        Stream objStream = objWebClient.OpenRead("http://jquery.com/");
        StreamReader objStreamReader = new StreamReader(objStream);
        string strOutput = objStreamReader.ReadToEnd();
        objStream.Close();
        objStreamReader.Close();
        StreamWriter sw = new StreamWriter(Server.MapPath("html.txt"));
        strOutput = Regex.Replace(strOutput, "<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\".*?\" />", "", RegexOptions.IgnoreCase);
        sw.Write(strOutput);
        sw.Close();
        dialog.InnerHtml = strOutput;
    }

最佳答案

              Object doesn't support property or method 'dialog' 

永远记住,如果您的其他脚本依赖于它,请先引用您的 jQuery 库文件,然后再引用任何其他库。这也可以作为一般做法。

所以正确的顺序应该是,

  • CSS 文件
  • Jquery库文件
  • jQuery UI 库文件
  • 任何其他 js 文件/插件文件。

使用 iFrame 不是什么大问题。 iFrame 与当今可用的大多数浏览器兼容,并且可以轻松地在 IE 中运行:)。

只需将 iFrame 放在您调用了 dialog 函数的元素 (div) 中。您可能需要相应地设计它们的样式。这个应该没有问题。 iFrame 的主要目的是在当前 HTML 文档中嵌入另一个文档。

查看工作 demo here .

注意:有些网站拒绝显示iFrame中的内容,因为他们设置了X-frame options .这个已经讨论过了here

希望这对您有所帮助,您已经找到了线索。

关于c# - 尝试将外部网页加载到框架/对话框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25050347/

相关文章:

c# - 通过谷歌云库进行情感分析

c# - 为什么 LINQ Where 搜索查询在 List<> 上比 ConcurrentBag<> 更快

javascript - 重新创建 jQuery 的选择器

javascript - CKEDITOR 在第一次提交时不通过 ajax 提交数据

css - 滚动后移动导航菜单卡在屏幕顶部

c# - WCF 在没有 "set "的属性上阻塞。任何解决方法?

c# - Web 应用程序时区问题

jquery - 在页面上时突出显示选定的菜单项

html - 如何在 sidebar-wrapper CSS 类中显示图像

html - 使用 CSS 添加渐变背景