2

現在、KnockoutJs を使用しており、Chrome パッケージ アプリを開発したいと考えています。データMVVMをバインドする方法を知りたいです。http://developer.chrome.comでは、html でインライン JavaScript を使用できないと述べているためです。JS は別ファイルにする必要があります。

では、このMVVMがクリックのために機能するようにするにはどうすればよいですか? ノックアウトでさらに?

<span data-bind="text : $data.name, click : $root.load> </span>
<span data-bind="text:shoppingCart().somethingChange()"></span>
4

4 に答える 4

5

クイックバージョン

ページをサンドボックス化して特定の機能を削除しない限り、実際には使用できません。


ロングバージョン

Chrome パッケージ アプリでは、使用するコードとライブラリがCSP に準拠している必要があります。つまり、 、 、HTML タグなどを使用することはできeval()ませnew Function()<script></script>

Knockout は、これらのいくつかをバインディングとテンプレートに使用します。そのため、Knockout has is for Chrome Packaged Apps は使用できません。

さらに、Knockout の開発者が CSP 準拠を目指していないことを指摘する情報を見つけました。これはGit repoにあります。

Chrome 拡張機能にも非常によく似た問題がいくつかあります。この件について私が読んだことは、iframeのサンドボックス化に関係していました...もう少し掘り下げた後、サンドボックス化により、ページが特定の機能を使用できなくなります。

唯一の代替手段は、Knockout 用のカスタム バインディング プロバイダーを使用することです。それでも、その時点で別の MV* ライブラリーを使用する方が説得力があると思います。

于 2013-09-11T03:17:45.797 に答える
1

知る限りこれ

ページをサンドボックス化して特定の機能を削除しない限り、実際には使用できません。

保持されなくなりました。

追加する限り:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",

manifest.json のルートレベルへ。

私は単純にそれを試しました: <h1 data-bind="text: version().length"></h1>

ページ内でdefault_popup、少なくとも Chrome の場合、問題は見つかりませんでした: 48.0.2564.116 (64 ビット) バージョン

于 2016-03-07T19:05:40.807 に答える
0

アクション(「クリック」など)ではなくテキストをバインドしようとしているように見えるので、計算されたオブザーバブルをモデルに追加し、その関数で必要な値を計算し、それをスパンにバインドするのが最も簡単です.

于 2013-08-14T17:59:58.407 に答える
-2

Knockout のデータ バインディングは、HTML でインライン JavaScript を使用しません。HTML の data-bind 属性は、ノックアウトが解析して外部スクリプト ファイルから実行する JavaScript のような式を含む可能性のある文字列式を定義するだけです。ノックアウト MVVM のデータ バインディングで問題が発生することはありません。

于 2013-08-16T09:01:00.417 に答える