jQuery移动应用程序中的iFrame会导致错误

时间:2012-07-26 09:07:53

标签: jquery iframe jquery-mobile

jQuery移动应用程序中的iFrame导致错误:Unsafe JavaScript attempt to access frame with URL file:///D:/xx/webpage.html from frame with URL http://www.asp.net/. Domains, protocols and ports must match.

我正在开发一个使用iFrame加载外部网站的jQuery移动应用程序 我的脚本代码是:

  $(document).ready(function () {

$('#divID').prepend('<img  src="http://xxx/images/ICPosternew1002.png" usemap="#map" id="image" style="margin-top:43px;"/>')
    $('#map').append('<area coords="30,0,60,30" id="1" alt="Blah" title="asp" />')
    $("#1").bind("click", function (e) {                
    e.preventDefault();         
           $('#Web1').append('<form id="form1" runat="server" rel="external"></form>')              
        $('#form1').append('<iframe id="iframe1" src="http://asp.net" frameborder="0" rel="external"></iframe>')
        });
    });

我的应用程序中有两个虚拟页面。点击主页面中的图像地图,可以使用iFrame和相应的网站加载第二页。

         <div data-role="page" id="Web" class="pagebody">
    <div data-role="header" data-position="inline" data-theme="a">
            <!--header-->
        </div>
        <div data-role="content" id="Web1">
    <form id="form1" runat="server">
            <iframe id="iframe1" >
            </iframe>
            </form> 
        </div>
        <div data-role="footer" class="footer">
            <!--footer-->
        </div>
    </div>

我的代码有问题吗?

2 个答案:

答案 0 :(得分:0)

这听起来像是同源政策的问题。请参阅此社区Wiki以获取解决方案:Ways to circumvent the same-origin policy

答案 1 :(得分:0)

我想你可以这样解决:

                     $(document).ready(function () {

                    var html = "";
                    html += "<div data-role=page id=win2 class=pagebody>";
                    html +=   "<div data-role='header'>";   
                    html +=   "</div>";
                    html +=   "<div data-role=content>";
                    html +=   "</div>";
                    html +=   "<div class=push>";
                    html +=   "</div>";
                    html +=   "<div data-role=footer class=footer>";
                    html +=   "</div>"
                    html += "</div>";
                    $(html).insertAfter ("#index");
                    for(var i=0;i<data.length;i++)
                    {
                        $("#area"+data[i].NodeID+"").bind ("click", function (event)
                        {
                            var title = $(this).attr("src");
                            alert(title);
                            $.mobile.changePage ($("#win2"));
                            $("#win2 div:jqmData(role=content)").empty().append ('<form id="form1" runat="server" rel="external"></form>')
                            $('#form1').empty().append('<iframe id="iframe1" src="'+title+'" frameborder="0" rel="external"></iframe>') 
                        });
                    }       
        });