21

数日前に新しい Greasemonkey 1.0 がリリースされて以来、jQuery を使用しているすべてのサイトと、Greasemonkey スクリプトで jQuery を使用しているすべてのサイトで、スクリプトが正しく実行されません。GS スクリプト (@requireメタデータを使用) にある jQuery は、ページの jQuery と競合します。これは新しい@grantコードによるものです。

ドキュメントを読みましたが、GS スクリプトをサンドボックスで再度実行する方法がわかりません。唯一のオプションは、GS API へのアクセスを許可するか、許可しないでスクリプトを実行するかのいずれかのようです。これは、何十もの GS スクリプトを実行するように設計したときにまったく機能しません。セキュリティの制限があり、そのように好きです。

4

3 に答える 3

15

Greasemonkey 1.0 は、サンドボックスの動作方法を根本的に変え、何千ものスクリプトを無効にしました。これは大きな問題です。この問題の主なバグ レポートについて、ご意見やご経験をお聞かせいただければ幸いです。

Greasemonkey ブログでは、次の方法で問題を回避できると主張しています

this.$ = this.jQuery = jQuery.noConflict(true);

...すべての場合にうまくいくかどうかはわかりません。そして、それは、副作用を回避する、DRY 原則、アトミック コーディングの哲学からの正確に間違ったアプローチです。私の意見では、最善の戦略はサンドボックスを復元することです。

@grant値 ( 以外)を指定して、サンドボックスを再アクティブ化しますnoneメタデータ ブロックを編集して、次の行で終了します

// @grant       GM_addStyle
// @grant       GM.getValue
// ==/UserScript==
/*- The @grant directive is needed to work around a design flaws introduced in GM 1.0
    and again in GM 4.0.
    It restores the sandbox.
*/

サンドボックスが復元され、すべての競合が解決されます。
また、スクリプトは、Tampermonkey や Violentmonkey などの優れたエンジンと互換性があります。

于 2012-09-04T00:34:20.517 に答える
7

2 年が経過しましたが、この「機能」はまだ十分に文書化されておらず、対処もされていません。

jQuery を必要とするスクリプトは、jQuery を使用する一部のページと競合します。

考えられる解決策は次のとおりです。

  1. スクリプトをサンドボックスに追加@grant GM_logまたは類似
  2. 次のブロックを追加して、スクリプト内の既存の jQuery オブジェクトにエイリアスを設定します。

    var my_jquery = jQuery;

    jQuery.noConflict(true);

    var $ = my_jquery, jQuery = my_jquery;

  3. jQueryを使わない

全体として、Greasemonkey のひどい決定です。

于 2015-05-28T14:44:15.950 に答える
5

同じ問題がありました。

GM バージョン 1.0 以降、@requirejQuery を使用するサイトで実行されている、jQuery を使用するすべてのスクリプトが機能しなくなりました。

のようなことを試すこともできますが$ = unsafeWindow.$、それは重要ではありません。

ここでのポイントは、以前は機能していたが、現在は機能していないということです。

追加する@grant GM_logと修正されました。

于 2012-09-21T12:23:09.403 に答える