質問

新しいSafari Userscript ManagerであるNinjakitで正常に動作するGreasemonkey JavaScriptを書きましたが、Safari 5拡張機能ビルダーを使用して同じスクリプトをコンパイルしようとすると、非常に奇妙な動作が得られます。

スクリプトはユーザーにオプションの編集画面を提供します。[保存]ボタンをクリックすると、スクリプトはHTML5 LocalStorage APIを介してJSONパケットとしてユーザーの設定を保存します。スクリプトはオプション画面を閉じてページをリロードします。スクリプトは、LocalStorageのJSONからの設定をリロードする必要があり、スクリプトは、ユーザーが作成した設定に従ってページを表示するようにページを表示するために新しい設定に基づいて動作する必要があります。

私が見ている問題は、拡張機能としてそれを実行するとき、保存ボタンをクリックすると、スクリプトがページをリロードしますが、ページがリロードされると、ユーザーが設定に加えた変更がページに適用されません。奇妙な部分は、ブラウザの更新ボタンを介して再び手動でページをリロードすると、設定でユーザーが作成した変更が突然明らかになることです。したがって、明らかにデータはLocalStorageに保存されていますが、何らかの理由でページが初めてリロードされたとき、何らかの形でキャッシュされたファイルからリロードされ、2番目のマニュアルリロードでのみ、新しいページが正しく表示されます。これがニンジャキットのプレーンユーザースクリプトとして機能する理由を理解できません。また、実際にはFirefox、Opera、Google Chromeで機能します。Safariの拡張機能として機能することはありません。 Safari 5がキャッシュされたページをリロードしないように多くの方法を試しました。たとえば、URLに追加のパラメーターを追加しましたが、ページを2回リロードせずに機能させることはできません。

ところで、私はスクリプトをクロスブラウザに互換性のあるものにしたいので、ネイティブSafari拡張設定システムを使用していません。そのため、設定をLocalStorageに保存しています。

他の誰かがこの行動を目撃しましたか?または、これを修正する方法はありますか?それは私を精神的に駆り立てています...

役に立ちましたか?

解決

問題を解決することができましたが、何が原因であるかを正確に理解していませんでした。

拡張ビルダーの「開始スクリプト」ではなく「エンドスクリプト」として追加することで、スクリプトを動作させました。これはすべて正常に動作しているようです。うーん!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top