簡體   English   中英

Greasemonkey 1.0 中的 jQuery 與使用 jQuery 的網站發生沖突

[英]jQuery in Greasemonkey 1.0 conflicts with websites using jQuery

自從幾天前發布新的 Greasemonkey 1.0 以來,每個擁有 jQuery 的站點以及我在 Greasemonkey 腳本中使用 jQuery 的地方都無法正確運行我的腳本。 我在 GS 腳本中的 jQuery(使用@require元數據)與頁面的 jQuery 沖突。 這是由於新的@grant代碼。

我已經閱讀了文檔,但仍然不知道如何再次在沙箱中運行 GS 腳本; 唯一的選擇似乎是授予對 GS API 的訪問權限或授予任何權限並在沒有任何安全限制的情況下運行腳本,當我設計了數十個 GS 腳本以運行時,這對我來說根本不起作用有安全限制,喜歡這樣。

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 等高級引擎兼容。

兩年過去了,這個“功能”仍然沒有得到充分的記錄或解決。

需要 jQuery 的腳本仍然與一些使用 jQuery 的頁面沖突。

可能的解決方案是:

  1. 添加@grant GM_log或類似的沙箱腳本
  2. 通過添加以下塊,在腳本中別名現有的 jQuery 對象:

    var my_jquery = jQuery;

    jQuery.noConflict(true);

    var $ = my_jquery, jQuery = my_jquery;

  3. 不要使用 jQuery

總而言之,Greasemonkey 做出了一個糟糕的決定。

有同樣的問題。

從 GM 版本 1.0 開始,我所有@require jQuery 的腳本在也使用 jQuery 的站點上運行都停止工作。

我知道,我可以嘗試諸如$ = unsafeWindow.$類的東西,但這不是重點。

這里的重點是他們曾經工作過,現在他們不會了。

添加@grant GM_log修復了它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM