Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从GreaseMonkey脚本调用添加到jQuery对象的函数?_Javascript_Jquery Plugins_Greasemonkey - Fatal编程技术网

Javascript 如何从GreaseMonkey脚本调用添加到jQuery对象的函数?

Javascript 如何从GreaseMonkey脚本调用添加到jQuery对象的函数?,javascript,jquery-plugins,greasemonkey,Javascript,Jquery Plugins,Greasemonkey,我已经根据我想要的页面内脚本创建了一个GreaseMonkey脚本,但是我有以下问题: 在脚本中,我们创建了包含大部分函数的名称空间(brickJax),在使用jQuery replaceText函数时,我需要jQuery 当我从replaceSet调用replaceText函数时,控制台上出现以下错误: 未捕获异常:TypeError:$(节点)。replaceText不是函数 但是,将其作为gmxmlhttprequestonload回调的一部分调用也可以 var brickJax = (f

我已经根据我想要的页面内脚本创建了一个GreaseMonkey脚本,但是我有以下问题:

在脚本中,我们创建了包含大部分函数的名称空间(
brickJax
),在使用jQuery replaceText函数时,我需要jQuery

当我从
replaceSet
调用
replaceText
函数时,控制台上出现以下错误:

未捕获异常:TypeError:$(节点)。replaceText不是函数

但是,将其作为
gmxmlhttprequest
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);
var brickJax=(函数($){
“严格使用”;
var brickJax={};
//[此处代码]
函数替换集(节点、str、编号、颜色){
var text='';
//此行抛出错误:
$(节点).replaceText(str,text);
}
函数替换图像(节点、str、编号、颜色){
getBricksForImage(编号、颜色、节点、str);
}
函数getBricksForImage(数字、颜色、节点、str){
GMxmlHttpRequest({
方法:“张贴”,
url:“http://brickjax.doodle.co.uk/bricks.aspx/JsonDetails/“+数字
+“/”+颜色,
数据类型:“jsonp”,
onload:函数(数据){
//这个电话打得很好
$(节点).replaceText(str,
buildImage($.parseJSON(data.responseText));
}
});
};
函数buildImage(ajaxData){
var text='';
返回文本;
}
函数替换标记(元素){
var elements=$(element).find('*').andSelf();
elements=elements.not($('script,noscript,style,textarea,pre,code'))
.find('*')。和self());
searchText(元素,/\[部分:([\w\-]*)(?::([\w\-]*))?\]/gi,replaceImage);
searchText(元素,/\[set:([\w\-]*)(?::([\w\-]*))?\]/gi,replaceSet);
};
})(jQuery);
replaceTags($('body');
(function($){$.fn.replaceText=function(b,a,c){[…]})(jQuery);
在实际的脚本中,我添加了日志记录,这表明
node
在这两种情况下都是HTML元素

我在从
replaceSet
调用时做错了什么,这与导致此错误的回调调用不同

在这种情况下,两个调用都按预期工作


为脚本墙表示歉意,我已尝试将其缩减到最基本的部分。

这可能与闭包有关,也可能是由于


无论哪种方式,解决方案都应该是相同的,将
replaceText
的定义物理地移动到
var brickJax=…
东西之前

这可能与关闭有关,也可能是由于关闭


无论哪种方式,解决方案都应该是相同的,将
replaceText
的定义物理地移动到
var brickJax=…
东西之前

看起来它可能与闭包有关。试着把
replaceText
的定义放在
var brickJax=…
之前。我会试试看,干杯:)@BrockAdams-如果你愿意把这个建议作为一个答案,我很乐意接受它-非常感谢,我想我明白为什么;)看起来它可能与闭包有关。试着把
replaceText
的定义放在
var brickJax=…
之前。我会试试看,干杯:)@BrockAdams-如果你愿意把这个建议作为一个答案,我很乐意接受它-非常感谢,我想我明白为什么;)