新しい Safari ユーザー スクリプト マネージャーである NinjaKit で正常に動作する Greasemonkey JavaScript を作成しましたが、Safari 5 拡張ビルダーを使用して同じスクリプトをコンパイルしようとすると、非常に奇妙な動作が発生します。
スクリプトはユーザーにオプション編集画面を提供します。保存ボタンをクリックすると、スクリプトはユーザー設定を HTML5 ローカルストレージ API を介して JSON パケットとして保存し、スクリプトはオプション画面を閉じてページをリロードします。ページのリロード時に、スクリプトは localstorage の JSON から設定を再読み込みし、スクリプトは新しい設定に基づいて動作し、ユーザーが行った設定に従ってユーザーが望む方法でページを表示する必要があります。
私が見ている問題は、拡張機能として実行すると、保存ボタンをクリックするとスクリプトがページをリロードしますが、ページをリロードすると、ユーザーが設定に加えた変更がページに適用されません。奇妙な部分は、ブラウザの更新ボタンを使用してページを手動で再度リロードすると、ユーザーが設定で行った変更が突然明らかになることです。明らかにデータはローカルストレージに保存されていますが、何らかの理由でページが初めてリロードされると、何らかの理由でキャッシュされたファイルからリロードされ、2 回目の手動リロードでのみ新しいページが正しく表示されます。なぜこれが ninjakit のプレーンなユーザースクリプトとして機能し、実際には Firefox、Opera、Google chrome でも機能するのか理解できません。サファリの拡張機能として機能しないだけで、すっごく面倒です。私'
ところで、私はネイティブのサファリ拡張機能設定システムを使用していません。スクリプトをクロスブラウザー互換にしたいので、設定をローカルストレージに保存しているのはそのためです。
他の誰かがこの行動を目撃しましたか? または、これを修正する方法の手がかりを得ましたか? それは私を精神的に駆り立てています...