まあ、苦労した2日目は、ささやかな成功を収めました。現在、demo sidebar navigation appをChromeアプリに表示できるようになりました。いくつかのことを変更しなければならなかった。
まず、window.history
のAPIファミリはChromeアプリケーションでは使用できません。その結果、ルーティングに使用する<app-location>
タグは、場所に依存しており、明らかにwindow.history
APIを利用しているため、機能しません。代わりに、私はそのタグを削除し、ルーティングとしてデータバインディングをうまく使用するために何らかの形で管理しています。ここにはmy-app.html
の関連部分があります。変更された主な変更点は、<app-location>
(ここではわかりやすくするためにコメントアウトしています)を削除し、[[page]]
から{{page}}
にselected
データバインディング属性を変更しています。中括弧は双方向バインディングを可能にします。 I は、<iron-selector>
要素がpage
変数を<iron-pages>
要素に送信できるようにする必要があると考えています。
<!-- <app-location route="{{route}}"></app-location> -->
<app-route
route="{{page}}"
data="{{routeData}}"
tail="{{subroute}}"></app-route>
<app-drawer-layout fullbleed>
<!-- Drawer content -->
<app-drawer>
<app-toolbar>Menu</app-toolbar>
<iron-selector selected="{{page}}" attr-for-selected="name" class="drawer-list" role="navigation">
<a name="view1" >View One</a>
<a name="view2" >View Two</a>
<a name="view3" >View Three</a>
<a name="new-view" href="/new-view">New View</a>
</iron-selector>
</app-drawer>
<!-- Main content -->
<app-header-layout has-scrolling-region>
<app-header condenses reveals effects="waterfall">
<app-toolbar>
<paper-icon-button icon="menu" drawer-toggle></paper-icon-button>
<div title>My App</div>
</app-toolbar>
</app-header>
<iron-pages role="main" selected="{{page}}" attr-for-selected="name">
<my-view1 name="view1"></my-view1>
<my-view2 name="view2"></my-view2>
<my-view3 name="view3"></my-view3>
<my-new-view name="new-view"></my-new-view>
</iron-pages>
</app-header-layout>
</app-drawer-layout>
以下に示すvulcanize
とcrisper
処理の後、これはChromeアプリケーションとしてロードするときナビゲーションバーを表示することができました。しかし、ページ自体(<iron-pages>
によって制御される)は読み込まれません。これは、HTMLインポートを動的に実行することでデモがユーザーフレンドリーであることが原因で発生しました。これは、パスの問題(おそらくURLローディングの制限 - わからない)のためにChromeアプリケーションを混乱させます。代わりに、手動でインポートする予定です。これにより、vulcanize
はその魔法を働かせることができます。最後に、src/my-app.html
<link rel="import" href="my-view1.html">
<link rel="import" href="my-view2.html">
<link rel="import" href="my-view3.html">
<link rel="import" href="my-new-view.html">
の上部に輸入の残りの部分に以下の行を追加しますsrv/my-app.html
のスクリプト部分からobserver: '_pageChanged'
と_pageChanged
機能自体を削除します。
近づいています。
Chromeアプリには、インラインスクリプト(<script>
タグ内のスクリプト)の実行を妨げる厳しいコンテンツセキュリティポリシーがあります。 Polymerはインラインスクリプトを大量に使用しているため、フレームワークの作者はこの問題を回避するためのツールを提供しています。
vulcanize walks HTML読み込み文を使用してネットワークの負荷を軽減します。 crisperはすべてのインラインスクリプトを抽出し、src
属性を持つ単一の<script>
タグにキャッチして、Chromeアプリケーションで実行できるようにします。次の行は、既存のindex.html
をChrome Apps用の1つのセーフに置き換えたものです。 (注あなたが最初にあなたの元index.html
をコピーすることを確認すること、置き換えられます。)
vulcanize --inline-scripts --inline-css index.html | crisper --html index.html --js index.js
は、今、私たちはChromeアプリとしてレンダリングすることができます任意のインラインスクリプトなしindex.html
を持っています。 2016-07-30現在、2つの問題が残っています。 1つは、Polymerがサービスワーカーを登録しようとすることです。 index.js
を開き、serviceWorker.register
コールを削除します。第二に、に_boundEffect
の定義があります。なんらかの理由で、Chrome Appsはvar noop = Function();
にはeval
が必要と考えており、実行しません。この行をvar noop =() => {}
に置き換えてください。これは基本的に同じことですが、何らかの理由でChrome Appsで許可されています。
この後、お使いのChromeアプリケーションにindex.html
をロードし、デモが動作します。
Huzzah。
[その他](https://github.com/PolymerLabs/polymerchromeapp)のサンプルをグーグルでお試しください。 – wOxxOm
良い点。これは、わかりやすく私の質問を明確にするのに役立ちます。残念ながら、私はPolymerが私が苦労していることを正確に知るには十分ではありません。私の闘いはあいまいです。私はすでにその例を見つけましたが、Chromeアプリケーションで少なくとも一部のポリマー要素を使用することは可能です。しかし、これは2つの理由による解決策ではない。まず、それはPolymerの長い廃れたバージョンです。第二に、私がフレームワークについて理解していることから、左のナビゲーションバーの 'paper-tabs' navシステムだけを交換することはできません。私はChrome-App-safeであるleft-navアーキテクチャを探しています。 – user1978019