【问题标题】:Tampermonkey jQuery require not workingTampermonkey jQuery 不需要工作
【发布时间】:2018-12-08 00:00:53
【问题描述】:

我正在尝试修改我为 Grease Monkey 编写的一段代码,以使其与 Tampermonkey 兼容。尽管我的@require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js,篡改猴子一直说'$'没有定义。要求适用于 Greasemonkey。

Tampermonkey 安装函数概述识别 JQuery 要求。

// ==UserScript==
// @name     Function
// @version  1
// @run-at   document-end
// @require  https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js
// ==/UserScript==

var userIP;

$.ajax({
    url: "https://api.ipify.org/?format=json", // Getting user Ip Address
    async: false,
    dataType: 'json',
    success: function(data) {
        userIP = data.ip; // Saving user Ip Address
    }
});

【问题讨论】:

  • (1) 您使用的是什么浏览器和版本? ... (2) 您在浏览器控制台中遇到什么错误? ... (3) `'$' is not defined` 消息是否仅在 Tampermonkey 编辑器中?
  • @BrockAdams 1, Firefox - 最新版本, 61.0 2, TypeError: $ is undefined 3, yes

标签: javascript jquery ajax tampermonkey


【解决方案1】:

Greasemonkey 使用 CodeMirror 文本编辑器和 JSHINT linter。

为了让 JSHINT 识别在您的代码之外声明的全局变量,您需要使用内联注释来定义它们。例如,要告诉 JSHINT 关于 jquery,请使用:

/* globals $ */

https://jshint.com/docs/#inline-configuration

【讨论】:

  • 这是一个更好的答案。它还可以让您禁用针对目标页面上已经存在的全局变量的警告。
【解决方案2】:

既然你说它只在编辑器中,这可能是 Tampermonkey 的语法检查没有加载所需的脚本,并将它们用作代码检查过程的一部分。所以它只是看到一个变量没有在用户脚本本身的任何地方声明并显示警告。该脚本仍应按预期工作。

如果这些消息让您烦恼,您可以通过在脚本顶部显式声明 $ 变量来清除它们,如下所示:

var $ = window.jQuery;//OR
var $ = window.$;

【讨论】:

  • 您的解决方案解决了我的问题,但它导致网页加载时间增加,从 ~1 秒到 ~31 秒
  • @SethWheeler 提供的代码不会导致这种情况,而是您设置了 ajax 设置async: false, 这告诉浏览器执行同步请求,这将冻结浏览器直到该请求已完成(因此为什么要折旧,请检查控制台是否有警告)
  • 你是对的谢谢你的帮助,我忘了异步
猜你喜欢
  • 2020-12-25
  • 2013-07-23
  • 2013-04-25
  • 1970-01-01
  • 2021-06-26
  • 2017-11-03
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
相关资源
最近更新 更多