4

jQuery 1.10.2 と jQuery Mobile 1.3.2 を使用して、次の単純な html で chrome パッケージ化されたアプリを作成しようとしています...

<!DOCTYPE html>
<html>
<body>
    <div data-role="page">
        <script async src="events.js" type="text/javascript"></script>
    </div>
</body>
</html>

2 つの問題があります。1 つ目は、jQuery が events.js をロードするスクリプト タグをインターセプトし、xhr.open( s.type, s.url, s.async ); を呼び出すことです。ただし、s.async は false です。Chrome でパッケージ化されたアプリでは、同期読み込みが許可されていません。したがって、jQuery のこの行の前に、s.async = true; を設定します。

次の問題は、jquery が最初のドキュメント挿入時に各スクリプトで globalEval メソッドを呼び出し、これが eval を呼び出して、chrome パッケージ アプリでこの CSP エラーを生成することです。

Uncaught EvalError: 'unsafe-eval' は次のコンテンツ セキュリティ ポリシー ディレクティブで許可されているスクリプトのソースではないため、文字列を JavaScript として評価することを拒否しました: "default-src 'self' chrome-extension-resource:".

1 つの解決策はサンドボックス化 (マニフェストに html ページを追加) かもしれませんが、これは別の問題を引き起こします: XMLHttpRequest は chrome-extension://ocnbknafegfhcgbiciegbfndjckamkoj/events.html を読み込めません。Origin null は、Access-Control-Allow-Origin では許可されていません。サーバーには「Access-Control-Allow-Origin」、「*」があるため、このエラーは予想されません。

では、最初の同期エラーは jquery の問題ですか? 2番目の問題もjquery/chromeパッケージアプリの不一致ですか? CSP の回避策はありますか? サンドボックス化してページ間のナビゲーションを許可する方法はありますか?

4

1 に答える 1

0

ご指摘のとおり、コンテンツ セキュリティ ポリシー (CSP) により、Chrome パッケージ アプリでは globalEval を使用できません。また、インライン スクリプト タグを使用することもできません。これは、CSP が同様にセキュリティ リスクと見なしているためです。

非 CSP 準拠の HTML と JS をサンドボックス化して正しい軌道に乗っていますが、XHR 要求を行うには、ウィンドウ間のメッセージング サービスを使用して Origin エラーを取り除く必要があります。

クロスオリジン リクエストの処理方法に関するドキュメントがある次の URL をご覧ください: http://developer.chrome.com/apps/app_external.html#cross-origin

于 2013-12-20T20:35:02.463 に答える