首页 > 解决方案 > 为什么我的点击处理程序没有应用到 Greasemonkey 脚本中?

问题描述

我正在尝试使用创建一个简单的 Greasemonkey 脚本jQueryjQuery已经从页面脚本加载。

我需要一个非常简单的改变:

var $ = unsafeWindow.jQuery;
$("body").prepend('<button id="tsDownload">DownloadExcel</button>');
$("#tsDownload").click(function(){
   alert("TEST!");
});

该脚本可以添加按钮,但无法附加点击事件,该部分被简单地忽略。你能告诉我为什么吗?与安全有关吗?例如,经过几次后,我发现我必须添加第一行才能jQuery从“unsafeWindow”中获取。

如果我从控制台尝试此代码,它可以工作!这就是为什么我猜测 Greasemonkey 的安全限制。

标签: jquerygreasemonkey

解决方案


这是尝试访问页面上使用的 jQuery 实例的安全问题,该实例被视为单独的窗口并有一些限制。

然而,这并不是真的要完成。相反,您应该在 GreaseMonkey 脚本中包含您自己的 jQuery 实例。您可以通过添加来做到这一点

// @require  https://code.jquery.com/jquery-3.3.1.min.js

到脚本顶部的注释。是的,这意味着脚本被加载了两次,但它是在本地缓存的,意义不大。


推荐阅读