問題タブ [ninjakit]

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.

0 投票する
1 に答える
751 参照

javascript - Safari はページと DOM の状態をキャッシュしているようです

新しい Safari ユーザー スクリプト マネージャーである NinjaKit で正常に動作する Greasemonkey JavaScript を作成しましたが、Safari 5 拡張ビルダーを使用して同じスクリプトをコンパイルしようとすると、非常に奇妙な動作が発生します。

スクリプトはユーザーにオプション編集画面を提供します。保存ボタンをクリックすると、スクリプトはユーザー設定を HTML5 ローカルストレージ API を介して JSON パケットとして保存し、スクリプトはオプション画面を閉じてページをリロードします。ページのリロード時に、スクリプトは localstorage の JSON から設定を再読み込みし、スクリプトは新しい設定に基づいて動作し、ユーザーが行った設定に従ってユーザーが望む方法でページを表示する必要があります。

私が見ている問題は、拡張機能として実行すると、保存ボタンをクリックするとスクリプトがページをリロードしますが、ページをリロードすると、ユーザーが設定に加えた変更がページに適用されません。奇妙な部分は、ブラウザの更新ボタンを使用してページを手動で再度リロードすると、ユーザーが設定で行った変更が突然明らかになることです。明らかにデータはローカルストレージに保存されていますが、何らかの理由でページが初めてリロードされると、何らかの理由でキャッシュされたファイルからリロードされ、2 回目の手動リロードでのみ新しいページが正しく表示されます。なぜこれが ninjakit のプレーンなユーザースクリプトとして機能し、実際には Firefox、Opera、Google chrome でも機能するのか理解できません。サファリの拡張機能として機能しないだけで、すっごく面倒です。私'

ところで、私はネイティブのサファリ拡張機能設定システムを使用していません。スクリプトをクロスブラウザー互換にしたいので、設定をローカルストレージに保存しているのはそのためです。

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

0 投票する
2 に答える
281 参照

greasemonkey - ページコンテキスト内でユーザースクリプト GM_functions を使用する

XMLHTTPRequest を介して特定のページのすべてをローカル ネットワーク ドメインに「再リンク」したいと考えています。ユーザースクリプトが実際に実行されたときではなく、リンクがクリックされたときに実行したいことを除いて、それはGreaseMonkey/NinjaKitのGM_xmlhttpRequestにつながります...

だから私は次のようなものを持っています:

unsafeWindow を使用するか、スクリプト要素をドキュメントに追加してloadLink関数を挿入できることを理解しています。しかし、 loadLinkGM_xmlhttpRequest
を使用するにはどうすればよいですか?

0.7.20080121.0 互換性ページを見ましたが、それが必要なものかどうかわかりません...

ページにiframeを追加することも検討しましたが、変更されたリンクはiframe内にロードされます(ユーザースクリプトを再度トリガーします)が、よりクリーンなソリューションを好む...

0 投票する
2 に答える
1153 参照

javascript - この Greasemonkey スクリプトがこの jQuery プラグインで動作しないのはなぜですか?

SafariでNinjaKitを使用しています(Greasemonkeyと同じ)。コードはこんな感じ

このページにアクセスするalertと、うまく表示できますが、.highlight依存して動作しない機能がありjQuery.highlightますjQuery。それは言います:

そして、これをデバッグするのはかなり難しいと思います..誰かそれについてアイデアを持っていますか?

0 投票する
1 に答える
584 参照

javascript - Safari 拡張機能によって作成されたデータの取得

そのため、最近 Safari が Safari 12 にアップグレードされ、Extensions API を介して作成されていないすべての拡張機能が正しく機能しなくなりました。過去数年間、実行されなくなった拡張機能を使用する必要があるプロジェクトに取り組んでいるため、これは面倒です。問題の拡張機能は、Ninjakit と呼ばれるブラウザー スクリプトを作成するための拡張機能であり、私が確認できる限り、どのような形でも存在しないため (最初にダウンロードした Web サイトは現在完全に機能していません)、更新される可能性はほとんどありません。 Safari 12 との互換性を確保するためです。そのため、拡張機能を引き続き使用できるようにするために使用できる回避策を検討しています。私が見つけた最良の戦略は、このブログ投稿で概説されているものです: https://georgegarside.com/blog/macos/install-any-safari-extension-macos-mojave/. そのページの指示に従うことで、Ninjakit を引き続き使用できるようになりましたが、Ninjakit で作成した 200 以上のスクリプトがすべて欠落しています (これらのスクリプトは完全に個人的な使用のために作成されたものではないことに注意してください)。いつでもインターネットにアップロードされます)。これは私には受け入れられません。ブログの投稿には、拡張機能の古い設定をインポートするための手順が記載されていますが、その手順に従おうとすると、通過できない障害に遭遇します。ある時点で、ファイル ~/Library/Preferences/com.apple.Safari.Extensions.plist を変更するよう指示されています。説明書によると「Root」の下に変更できるデータがあるのですが、XCodeでファイルを開くと「Root」が完全に空です。

正直なところ、Safari (または Chrome などの別のブラウザー) でスクリプトを作成するために使用できる他のより優れた拡張機能がおそらくあります。 、そうすると、古いスクリプトをすべてゼロから書き直すことになり、これはまったく実現不可能です。これらのスクリプトは最終的には Javascript コードにすぎないため、Safari はそれらを何らかの物理的な形式で私のマシンに保存していたに違いないと思いますが、どのファイルにこのデータが含まれているかは一生わかりません。ライブラリとタイム マシンを検索しましたが、成功しませんでした。古いスクリプトに再度アクセスする方法を誰かが知っている場合は、助けていただければ幸いです.Javascriptコードをコピーして別の拡張機能に貼り付けるだけでも十分です.

私のマシンはまだ OSX Mojave にアップグレードされていません - それはまだ OSX High Sierra 上にあります。正確なバージョン番号はわかりませんが (現在、これを別のマシンから投稿しています)、必要に応じてその情報を簡単に取得できます。