为什么我的点击处理程序没有应用到Greasemonkey脚本中?

时间:2019-03-22 14:39:50

标签: jquery greasemonkey

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

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

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

脚本可以添加按钮,但不能附加click事件,该部分将被忽略。你能告诉我为什么吗?与安全有关吗? 例如,经过几次发现,我不得不添加第一行才能从“ unsafeWindow”获得jQuery

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

1 个答案:

答案 0 :(得分:1)

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

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

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

到脚本顶部的注释。是的,这意味着脚本将加载两次,但是会在本地缓存并且不会有太大意义。