Я создал скрипт GreaseMonkey на основе скрипта на странице, который я хотел бы использовать на сайте , однако у меня возникла следующая проблема:
ВСценарий, мы создали наше пространство имен (brickJax
), которое содержит большую часть функций, и мне потребовался jQuery, так как мы также используем функции jQuery replaceText.
Когда я вызываюreplaceText
функция из replaceSet
Я получаю следующую ошибку на консоли:
исключение uncaught: 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
, который отличается от вызова в обратном вызове, который вызывает эту ошибку?
В размещенной версии оба вызова работают как положено.
Извиняюсь за стену скрипта, я триЭд, чтобы сократить его до самого необходимого.