jquery - 为什么我的点击处理程序没有应用到 Greasemonkey 脚本中?
问题描述
我正在尝试使用创建一个简单的 Greasemonkey 脚本jQuery
。jQuery
已经从页面脚本加载。
我需要一个非常简单的改变:
var $ = unsafeWindow.jQuery;
$("body").prepend('<button id="tsDownload">DownloadExcel</button>');
$("#tsDownload").click(function(){
alert("TEST!");
});
该脚本可以添加按钮,但无法附加点击事件,该部分被简单地忽略。你能告诉我为什么吗?与安全有关吗?例如,经过几次后,我发现我必须添加第一行才能jQuery
从“unsafeWindow”中获取。
如果我从控制台尝试此代码,它可以工作!这就是为什么我猜测 Greasemonkey 的安全限制。
解决方案
这是尝试访问页面上使用的 jQuery 实例的安全问题,该实例被视为单独的窗口并有一些限制。
然而,这并不是真的要完成。相反,您应该在 GreaseMonkey 脚本中包含您自己的 jQuery 实例。您可以通过添加来做到这一点
// @require https://code.jquery.com/jquery-3.3.1.min.js
到脚本顶部的注释。是的,这意味着脚本被加载了两次,但它是在本地缓存的,意义不大。
推荐阅读
- c# - 绑定达到的依赖属性的触发器/设置器
- php - 在 docker-compose 的 2 个容器之间共享环境变量
- alexa - Alexa Skills - 如何从另一个意图返回具有槽值的意图?
- javascript - React Native 在snack.expo.io 上使用本地字体
- python - odoo10 如何在 1 个字段中构建 2 个 onchange 函数
- javascript - 无法在 MongoDB 缝合服务中搜索 ObjectID
- php - 为什么 file_put_contents 和 serialize 只添加序列化的一部分,即使数据进来了?
- javascript - 用于将数字与范围滑块比率相乘的 PHP 代码
- visual-studio - 如何在输出窗口中调试 System.ArgumentException?
- javascript - jshint 根据函数是否为无效给出“缺少分号”?