我如何从我的GreaseMonkey脚本调用添加到jQuery对象的函数
How can I call a functions added to the jQuery Object from my GreaseMonkey script?
我已经创建了一个基于页面内脚本的GreaseMonkey脚本,我想在一个网站上使用,但是我有以下问题:
在脚本中,我们已经创建了包含大量函数的命名空间(brickJax
),并且我需要jQuery,因为我们也使用jQuery replaceText函数。
当我从replaceSet
调用replaceText
函数时,我在控制台上得到以下错误:
未捕获的异常:TypeError: $(node)。replaceText不是一个函数
然而,调用它作为GM_xmlhttpRequest
onload
回调的一部分工作良好。
var brickJax = (function ($) {
"use strict";
var brickJax = {};
//[Code here]
function replaceSet(node, str, number, colour) {
var text = '<a href="http://www.peeron.com/inv/sets/' + number + '-1">'
+ number + ' on Peeron</a>';
// THIS LINE THROWS THE ERROR:
$(node).replaceText(str, text);
}
function replaceImage(node, str, number, colour) {
getBricksForImage(number, colour, node, str);
}
function getBricksForImage(number, colour, node, str) {
GM_xmlhttpRequest({
method: "POST",
url: "http://brickjax.doodle.co.uk/bricks.aspx/JsonDetails/" + number
+ "/" + colour,
dataType: "jsonp",
onload: function (data) {
// THIS CALL WORKS PERFECTLY
$(node).replaceText(str,
buildImage($.parseJSON(data.responseText)));
}
});
};
function buildImage(ajaxData) {
var text = '<img style="max-height:100px;" src="' + ajaxData.Src
+ '" alt="' + ajaxData.AltText + '" />';
return text;
}
function replaceTags(element) {
var elements = $(element).find('*').andSelf();
elements = elements.not($('script,noscript,style,textarea,pre,code')
.find('*').andSelf());
searchText(elements, /'[part:(['w'-]*)(?::(['w'-]*))?']/gi, replaceImage);
searchText(elements, /'[set:(['w'-]*)(?::(['w'-]*))?']/gi, replaceSet);
};
})(jQuery);
brickJax.replaceTags($('body'));
(function ($) { $.fn.replaceText = function (b, a, c) { [...] } })(jQuery);
在实际的脚本中,我添加了日志记录,这表明node
在这两种情况下都是HTML元素。
我在replaceSet
的调用中做错了什么,这与导致此错误的回调调用不同?
在宿主版本中,两个调用都按预期工作。
为这一大堆的脚本道歉,我已经尽力把它精简到最基本的部分。
这要么是闭包相关的,要么是由于函数定义在表达式而不是声明。
无论哪种方式,解决方案都应该是相同的,将replaceText
的定义物理地移动到var brickJax = ...
之前。
相关文章:
- 正在SharePoint 2013母版页中添加JQuery移动文件
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 使用.on动态添加jquery/js不知道的html元素
- Rails资产管道-只向head添加jquery
- 如何在XHTML中添加jQuery CDN回退
- 添加JQuery UI在Meteor中添加对象后可调整大小
- 添加jquery Datepicker后,文本框的初始值不会显示
- 添加Jquery验证后,Jquery日期选择器无法工作
- 如何在谷歌博客中添加jQuery而不修改模板
- 从服务器端添加jQuery函数
- 如何在jQuery.awesomeCloud.plugin上添加jQuery工具提示功能
- 动态添加jquery ajax选项
- 正在添加JQuery淡入淡出代码
- 添加 jQuery UI 后,从表中删除行的函数不起作用
- 如何动态添加 jQuery 移动弹出效果到链接
- 如何在 mytemplate 中添加 Jquery
- 在页面加载后动态添加 jquery 日期选择器
- 这是在一个项目中添加Jquery和Angularjs的正确方法
- 滚动到页面末尾后添加 JQuery 微调器
- 在图像不起作用的 src 中添加 jQuery 变量