2

我想在 iframe 中运行 jquery 移动站点,该 iframe 是沙盒但带有允许脚本。但它什么也不会显示。

<!Doctype html>
<html>
<head>
<title>#1 JS Scope</title>
<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">

<!-- Libs -->
<script src="../../lib/jquery-1.8.2/jquery-1.8.2.js"></script>
<script src="../../lib/jquery-mobile-1.2.0/jquery.mobile-1.2.0.js"></script>
<link href="../../lib/jquery-mobile-1.2.0/jquery.mobile.structure-1.2.0.css" rel="stylesheet">
<link href="../../lib/jquery-mobile-1.2.0/jquery.mobile-1.2.0.css" rel="stylesheet">
</head>

<body>
<!-- Page -->
<div data-role="page" id="home">
    <!-- Header -->
    <div data-role="header" data-theme="a">
        <h1>Top</h1>
    </div>

    <!-- Content -->
    <div data-role="content"  data-theme="c" id="frame">
        <iframe src="http://jquerymobile.com/demos/1.2.0/" sandbox="allow-scripts" width="926" height="974"></iframe>
    </div>
</div>
</body>
</html>

它是沙盒的,因为我想阻止完成的 jquery 移动应用程序访问包装页面的 DOM。因此只有allow-script 设置为允许运行jquery mobile 的javascript。

但是 iframe 只显示白色,我真的不知道可能出了什么问题。因为 jquery 不需要访问父 DOM 来显示某些内容。

4

1 回答 1

0

jQuery Mobile 试图操纵浏览器历史记录 (history.replaceState),这在沙盒化时是不允许的

init: function() {
    $win.bind( "hashchange", self.onHashChange );

    // Handle popstate events the occur through history changes
    $win.bind( "popstate", self.onPopState );

    // if there's no hash, we need to replacestate for returning to home
    if ( location.hash === "" ) {
        history.replaceState( self.state(), document.title, $.mobile.path.getLocation() );
    }
}
于 2013-07-29T19:54:47.187 回答