如何在JQUERY UI的对话框中打开URL

7

我已经寻找了一段时间简单的解决方案。我想要一个页面(例如http://www.google.com)显示在JQuery UI对话框窗口中。计划以后动态添加URL,使网站的所有链接都显示在该窗口中。

我尝试了以下方法,但是当点击链接时,对话框窗口为空。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Test</title>


<meta charset="utf-8" />
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.1/themes/base/jquery-ui.css" />
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js"></script>
  <script>
$(document).ready(function() {
    $('#openwindow').each(function() {
        var $link = $(this);
        var $dialog = $('<div></div>')
            .load($link.attr('href'))
            .dialog({
                autoOpen: false,
                title: $link.attr('title'),
                width: 500,
                height: 300
            });

        $link.click(function() {
            $dialog.dialog('open');

            return false;
        });
    });
});
  </script>

</head>
<body>
<a id="openwindow" href="http://www.google.com">Click me to test.</a>
</body>
</html>

我找到了一些例子,但都没有实际有效。我真的很希望能得到帮助。

先行谢过。


你基本上想要一个 AJAX 调用,是吗? - Anubhab
5个回答

15

不需要像建议的那样使用iframe,但是您应该阅读有关对话框的文档 here

相反,您需要在.open 属性上加载内容 --

$( "#openwindow" ).dialog({
 open: function(event, ui) {
   $('#divInDialog').load('test.html', function() {
     alert('Load was performed.');
   });
  }
});

此外,你似乎在使用具有 id.each -- 在页面内,id 应该是唯一的。请改用 class


2
如果URL在另一个域中,由于跨域AJAX限制,您无法使用.load() - Barmar

7

你可以尝试这个

$(function(){
    $('a').on('click', function(e){
        e.preventDefault();
        $('<div/>', {'class':'myDlgClass', 'id':'link-'+($(this).index()+1)})
        .load($(this).attr('href')).appendTo('body').dialog();
    });
});

上述代码将在单击页面上的任何链接时创建一个新的 dialog,还会为每个对话框添加类名myDlgClass和唯一的id,如link-1link-2等,但请记住,由于同源策略,只有页面链接会被加载,而不是外部链接。
更新:
要使用外部网站链接,您可以使用iframe,这里是一个使用iframe的示例:示例

1

这里可能会有所帮助.. 我正在做的是悬停在链接上,然后在对话框中打开URL.. 如果动态创建多个相同标签,请使用class而不是id,否则它只适用于单个id

$('.openwindow').click(function(){
var $this=$(this);
         $.ajax({
                url: $this.attr('href');//You got the link here
                success: function(data) {
                    //show the dialog here..
                    //"data" contains the html returned by the url
                },
                error: function(jqXHR){
                    //Do something here
                }
              });
        });

0

我知道这已经过时了,但以上建议都对我没用。经过多次调查,我找到了一个非常简单的解决方案。向文档添加一个链接对象,设置href参数,并以编程方式单击它即可下载,无需使用iframe或对话框。我需要根据用户在页面上的操作获取签名的S3 URL并提供文件下载。我不允许填充具有长时间持续时间的签名页面。以下是我的ajax:

$.ajax({
    type: "GET",
    url: actionUrl,
    complete: function(data) {
        var signedS3url = data.responseText;
        var link=document.createElement('a');
        document.body.appendChild(link);
        link.href=signedS3url;
        link.click();                               
    }
});

0

你可以使用iframe:

 $("#iframeId").attr("src", $(this).attr("href"));
 $('#dialogId').dialog('open');

<div id="divId" >
    <IFRAME id="iframeId"  SRC="" width="" height = "" >
</div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接