Предоставям приспособление за Javascript на други сайтове и използването на Jquery в приспособлението изглежда е в конфликт с използването на Prototype от хост сайта.
Можете да видите конфликта в действие тук: http://www.phillyrealestateadvocate.idxco.com/idx/8572/results.php?lp=100000&hp=500000&sqFt=0&bd=2&ba=0&searchSubmit=&city%5B%5D=131
От дясната страна на страницата щракнете върху зеления бутон „Задайте въпрос“ - той ще създаде изскачащ прозорец и веднага щом отворите изскачащия прозорец, грешките „невалидна дължина на масива“ започват да се появяват в JS конзолата (и не t stop.) Тогава изскачащият прозорец не може да се затвори, но все още може да се плъзга. Кодът/съдържанието в изскачащия прозорец е във вградена рамка, така че все още работи нормално, но изскачащият прозорец просто не се затваря.
Грешката, която Firebug ми дава, е: invalid array length
в Prototype.js, но когато разширя това за подробности, има препратки към jquery.min.js, така че това ме накара да повярвам, че двете са в конфликт.
Моят код на джаджа е изцяло в анонимна функция и зарежда Jquery, използвайки модела, описан тук от Алекс Марандън: http://alexmarandon.com/articles/web_widget_jquery/
Използвам noConflict повикване, но може би не работи по начина, по който го поставих?
Ето началото на моя скрипт на джаджа, който съдържа препратките към jquery.min.js и jqueryui:
(function() {
// Localize jQuery variable
var jQuery;
/******** Load jQuery if not present *********/
if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.6.2')
{
var script_tag = document.createElement('script');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src",
"http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js");
script_tag.onload = scriptLoadHandler;
script_tag.onreadystatechange = function () { // Same thing but for IE
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoadHandler();
}
};
// Try to find the head, otherwise default to the documentElement
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
}
else
{
$.getScript( "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js" ,
function()
{
// The jQuery version on the window is the one we want to use
jQuery = window.jQuery;
main();
}
);
}
/******** Called once jQuery has loaded ******/
function scriptLoadHandler()
{
$.getScript( "https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js" ,
function()
{
// Restore $ and window.jQuery to their previous values and store the
// new jQuery in our local jQuery variable
jQuery = window.jQuery.noConflict(true);
main();
}
);
}
/******** Our main function ********/
function main()
{
// Do a bunch of stuff here
}
})(); // We call our anonymous function immediately
Всяка помощ ще бъде много ценена!
Редактиране: Сега имам Jquery UI директно в приспособлението, така че премахнах напълно извикванията на getScript. За съжаление това не реши конфликта. Ето новия код:
(function() {
// Localize jQuery variable
var jQuery,
/******** Load jQuery if not present *********/
if (window.jQuery === undefined || window.jQuery.fn.jquery !== '1.6.2')
{
var script_tag = document.createElement('script');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js");
script_tag.onload = scriptLoadHandler;
script_tag.onreadystatechange = function () { // Same thing but for IE
if (this.readyState == 'complete' || this.readyState == 'loaded') {
scriptLoadHandler();
}
};
// Try to find the head, otherwise default to the documentElement
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
}
else
{
jQuery = window.jQuery;
main();
}
/******** Called once jQuery has loaded ******/
function scriptLoadHandler()
{
jQuery = window.jQuery.noConflict(true);
main();
}
/******** Our main function ********/
function main()
{