問題タブ [service-worker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - https iframe 内で Service Worker を登録するときの DOMException
http (セキュリティで保護されていない) サイト内の https iframe に Service Worker を登録しようとしています。最近まで、私のコードは問題なく実行されていました。最後のクロム更新 (44) から、このコードは iframe 内で失敗します:
コンソールに次のエラーが表示されます。
Uncaught (in promise) DOMException: Only secure origins are allowed
保護されていない親で実行されている場合、保護された iframe が Service Worker を登録できないようにする変更はありましたか?
google-chrome - キャッシュするファイルをService Workerに伝える方法
私がしていること
Service Worker コンポーネントを構築しています。私はそれが欲しい:
- Service Worker 実装を含む単一の worker.js ファイル。
- ワーカーに、キャッシュするファイルとキャッシュの名前を伝えられるようにしたいと考えています。
- なんで?いくつかのプロジェクトでこのモジュールを要求したいのですが、それらのいずれにもワーカー ファイルを変更させたくありません。ワーカーは、キャッシュへのパスのリストを受け取ることができる必要があります。
私が試したこと
- 構成オブジェクトを register メソッドに渡そうとしましたが、うまくいきませんでした。ワーカーはオブジェクトを受け取りませんでした。
- ワーカーで利用可能な postMessage API を利用して、次のようにしました。
- ワーカーの登録では、キャッシュするルートを持つオブジェクトを含むメッセージをワーカーに送信しました。
- ワーカー内で、ワーカーをこのメッセージにサブスクライブし、パスを使用してキャッシュを作成しました。
自分の目で確かめてください
メインスレッドへのワーカの登録
ワーカーファイル
これの何が問題なのですか?
setTimeout を使用してキャッシュを開くのを遅らせなければなりませんでしたが、これは間違っていて、見苦しく、信頼性がありません。
あなたは何を達成しようとしていますか?ಠ_ಠ</h3>
キャッシュへのパスを含むメッセージが届くまで待つようワーカーに指示する方法を見つけたいと考えています。
私のレポへのリンク
前もって感謝します。
javascript - Serviceworker が jquery の 1 秒おきの投稿を即座に失速させるのはなぜですか?
タイトルで述べたことは、Firefox のようにクロムでのみ発生します。代わりにトリガーします。
ブラウザをクリアするか、シークレット モードで実行すると、最初は機能しますが、最初にログアウトしてから再度ログインすると、問題が発生します。
SWを登録するコードは次のとおりです。
「/service-worker」は、(.htaccess 経由で) index.php に送信されるリクエストです。最終的には次の関数になります。
chrome://serviceworker-internals/ に表示される Service-worker.js は次のようになります: (アドレスへのいくつかの参照は星に置き換えられています)
ここで、「if(!navigator.serviceWorker.controller) navigator.serviceWorker.register( '/service-worker', { scope: '/' });」をコメントアウトすると、その後、問題は消えますが、サービスワーカーのサブスクライブとサブスクライブ解除が機能しなくなります。(if ステートメントはあまり機能していないようで、これを解決するために追加されただけです)
私は、さまざまな式を実行するためのさまざまな条件で activateSW() の多数のバージョンを試しましたが、サービスワーカーを壊さずに機能するバージョンを作成することができませんでした。また、さまざまなポイント(登録、投稿)でエラーをキャッチしようとしましたが、どれもスローしないため、これは失敗しました.
私が問題だと思うのは、サービスワーカーを登録すると、アクティブ化イベントがトリガーされることです。これをキャッチしてイベントの約束を完了すると、サブスクライブできなくなります。ただし、ログアウトしてもサービスワーカーがアクティブなままであり、これが問題を引き起こしていると思われます。
質問がある場合、またはさらにコードを見たい場合は、質問してください。
編集; ここに解決策があります:
karma-runner - Karma テストで Service Worker を読み込んで使用する
ロードされたファイルに対してソースコード変換を実行するService Workerを作成したいと考えています。この機能をテストするために、Karma を使用します。
私たちのテストでは、ソース コード変換が実行されるソース ファイルをインポートします。テストは、Service Worker が変換を実行した場合にのみ成功し、Service Worker がアクティブでない場合に失敗します。
ローカルで Karma を開始しsingleRun: false
、変更されたファイルを監視してテストを再開できます。ただし、Service Worker は、最初に読み込まれたページではアクティブではありません。したがって、すべてのテスト ケースは成功しますが、最初のケースは成功します。
ただし、継続的インテグレーションには、シングルラン モードが必要です。そのため、テストの実行中に Service Worker はアクティブではなく、それに応じて失敗します。また、2 回連続して実行しても、この問題は解決しません。Karma は使用中のブラウザーを再起動するためです (そのため、Service Worker が失われます)。
問題は、テスト実行で Service Worker を利用できるようにする方法です。たとえば、カルマが使用するブラウザー インスタンスを保持することによって。
javascript - 別のサブドメインから Service Worker を登録する方法
https://abc.xxxx.comとhttps://xyz.xxxx.comの 2 つのサブドメインがあります。だから私の質問:
1)。https://abc.xxxx.comからhttps://xyz.xxxx.comの Service Worker を登録することはでき ます か? はいの場合、どのように?
2)。http://abc.xxxx.com ( httpは安全でない) の場合、とにかくiframe などのようにhttp://abc.xxxx.comからhttps://xyz.xxxx.comのサービスワーカーを登録します....
これは実際の状況です。複数のサブドメインに直面しています。どんな助けでも感謝します。前もって感謝します。
ecmascript-6 - Use browser.js in a service worker
We want to use a Service Worker to perform client-side source code transformation for development purposes. We want to use Babel to transpile ES6+/ES2015 files to ES5 modules.
However, including the browser version of babel in a Service Worker using importScripts
causes the following errors:
So, the question is, how to correctly import babel into a Service Worker.
edit: This is not the obvious NetworkError, as we can change the content of the file into something simple, which enables us to actually load and execute the file. Also, the file can be loaded with a normal <script>
tag.
edit2: To get this message, check out this repository https://github.com/onsetsu/lively4-core.git, start a local server at port 8080 and finally load http://localhost:8080/bootworker.html. We are currently using Chrome 44.
javascript - SSL を使用しない Chrome Web 通知 (Service Worker をバイパス)
では、SSL 証明書なしで Chrome に Web 通知を実装することは可能ですか? サイトに SSL をインストールすることは避けたいので、Service Worker なしで通知を送信する方法があればいいのにと思います。