0

FireBreath を使用して Web プラグインを開発していますが、この分野ではかなり初心者です。これまで、非常に複雑なプラグイン API クラスを開発してきました (登録されたメソッド、プロパティ、およびその他の変数と構造体を使用)。javascript とデフォルト
オブジェクト id="plugin0" type="application/x-myapp> タグを使用してページにロードしています
が、別の HTML ページにリダイレクトする必要があり、以前に入力した変数をすべて保持する必要があります。 OBJECT タグのある同じモデルで、すべての変数が定義されていなかったので、プラグインの別のインスタンスを作成したと思います.だから私の質問は、プラグインの 1 つのインスタンスを保持し、複数の HTML ページでアクセスできるようにする方法ですか?
具体的には、ログイン画面を使用してプラグイン API クラス内に変数とポインターを格納する 1 つのページがあり、ログイン後に別のページにリダイレクトして、以前に入力した変数とポインターにアクセスできるようにする必要があります。

4

1 に答える 1

3

簡単な答え?できません。プラグインは単一のページに固有です。特定のプラグインインスタンスは、それを含むオブジェクトタグで破棄されます--period。この規則に例外はありません。

そうは言っても、あなたがしていることに挑戦できるいくつかのオプションがあります:

1)WebサイトをAJAXおよびjavascript駆動型に書き直して、すべてのページが実際には異なるハッシュタグなどを使用して同じページになるようにします。これに役立つ1つのフレームワークについては、http://backbonejs.org/を参照してください。プラグインの観点からは、これは間違いなく最も簡単な解決策ですが、Webサイト全体を書き直す必要があり、問題が発生する可能性があります。

2)Webアプリケーションを使用して状態を維持し、各ページのプラグインにデータを戻します。プラグインがインスタンス化されたら、paramタグまたは関数呼び出しを介してこれを行うことができます

3)グローバルメモリスペースに保存されたデータを使用して、プラグインで何らかの「セッション」を作成します。その後、別のページで「セッション」を再開できます。例えば:

if (!plugin.restoreSession("userid")) {
    plugin.createSession("userid");
}

この例では、createSessionとrestoreSessionを使用して、特定のセッションを初期化または再開します。これに伴う課題は、プラグインを使用して開いているタブまたはページの数がわからないため、同じグローバルデータにアクセスするすべてのページ間で簡単に衝突する可能性があることです。さらに、誰かがプラグインを使用してセッションを復元し、データを変更またはアクセスする別のWebページを作成する可能性があるため、セキュリティ上のリスクがあります。これを軽減するには、セッションにドメイン名を保存し、同じドメインからのセッションへのアクセスのみを許可しますが、これで基本的にCookieを再作成しただけです。

さらに、ブラウザはプラグインモジュールがロードされる時間を実際に保証するものではありません。アクティブなインスタンスがない場合(ページリクエスト間)にいつでもアンロードされる可能性があります。実際には、ブラウザが閉じるまでプラグインモジュールがアンロードされない可能性がはるかに高くなります。つまり、プラグインのグローバルメモリに保存したデータは解放されず、ブラウザを閉じるまでメモリを消費し続けます。

4)プラグインを使用し、複数のページリクエストで機能するブラウザ拡張機能を作成します。どうすればいいのかわかりませんが、他の人から聞いたことで、それは可能だと思いました。サポートされているブラウザごとに1つ作成する必要があり、IEではおそらく不可能であることに注意してください。おそらくFirefox/Chromeでのみ。

StackOverflowを初めて使用する場合は、サイトにようこそ。質問を投稿するたびに(これだけでなく!)、役立つ回答に賛成し、常に正しいものとしてマークするようにしてください。

于 2012-08-09T21:19:36.930 に答える