2012-08-28 10 views
11

Modem bootstrap na Twitterze nie ładuje zewnętrznych adresów wewnątrz modalu.Twitterowe modularne adresy URL nie działają

Przykładowy kod: jsFiddle

<a data-toggle="modal" class="btn" href="http://stackoverflow.com" data-target="#myModal">click me</a> 
<div class="modal hide fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-header"> 
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 
    <h3 id="myModalLabel">Modal header</h3> 
    </div> 
    <div class="modal-body"> 
    </div> 
</div> 

Odpowiedz

31

To nie działa, ponieważ naruszają ten sam origin policy restriction który uniemożliwia wysyłanie żądań AJAX domen krzyż, który jest co bootstrap korzysta tutaj. Tak więc jedną z możliwości jest załadowanie zawartości zewnętrznej w produkt :

$('a.btn').on('click', function(e) { 
    e.preventDefault(); 
    var url = $(this).attr('href'); 
    $('.modal-body').html('<iframe width="100%" height="100%" frameborder="0" scrolling="no" allowtransparency="true" src="' + url + '"></iframe>'); 
});​ 

Uważajcie jednak, że niektóre strony (takie jak Google, stackoverflow, Facebook, ...) nie mogą być ładowane do iframe. Ustawiają one nagłówek HTTP odpowiedzi X-Frame-Options na SAMEORIGIN, a także sprawdzają, czy są one załadowane wewnątrz iframe.

Można zobaczyć go w akcji w tym skrzypce: http://jsfiddle.net/f2Fcd/

+0

Dziękuję za odpowiedź. Używam zewnętrznego adresu URL, aby sprawdzić, czy ten problem jest JS Fiddle. Chcę załadować mój wewnętrzny widok mvc asp.net do załadowania wewnątrz modelu. To nie działa dla mnie. Dla celów przykładowych używam helloworld.html http://jsfiddle.net/kV8hB/3/ Dziękuję, Naveen – Naveen

+0

Jeśli chcesz, aby załadować swój wewnętrzny widok ASP.NET MVC wtedy nie trzeba iframe . Upewnij się tylko, że adres URL jest poprawny. Na przykład, co się dzieje, jeśli adres URL w href znajduje się bezpośrednio w pasku adresu przeglądarki? Czy to działa? –

+0

Dziękuję za pomoc. – Naveen

2

Spróbuj tego:

<script type="text/javascript" charset="utf-8"> 
$(function() { 
$('*[data-modal]').click(function(e) { 
e.preventDefault(); 
var href = $(e.target).attr('href'); 
    if (href.indexOf('#') == 0) { 
    $(href).modal('show'); 
    } else { 
    $.get(href, function(data) { 
    $('<div class="modal">' + data + '</div>').modal('show').appendTo('body'); 
         }); 
        } 
       }); 
      }); 
     </script> 
0

Ten fragment pomaga pobierania modalne treści przez Ajax:

$.get(href, function(response) { 
    $("#myModal .modal-content").html(response); 
}); 

pamiętać , że pobrany kod HTML, musi zawierać elementy-domki zwykle obecne w elemencie "modalnym":

<div class="modal-header">HEADER</div> 
<div class="modal-body">BODY</div> 
<div class="modal-footer"> 
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> 
    <button type="button" class="btn btn-primary">Do It</button> 
</div> 
Powiązane problemy