2010-07-21 2 views
1

дамы и джентльмены,Освежающего CRM Page Причина JQuery/JavaScript Error

У меня есть страница CRM, который ссылается на 3 JS файлов (1x JQuery, 2x пользовательских) все хранящиеся в/ISV/папке CRMInstall.

В форме метода OnLoad я загружаю каждый из них, а затем использую его для расширения/настройки пользовательского интерфейса.

Моя неопытность с jQuery, очевидно, показывается!

код OnLoad ниже:

//jquery 
var url = "/isv/jquery-1.4.2.js"; 
var scriptElement = document.createElement("<script src='" + url + "' language='javascript'>"); 
document.getElementsByTagName("head")[0].insertAdjacentElement("beforeEnd", scriptElement); 


$(document).ready(function() 
{ 
$.getScript("/isv/common.js", function() 
{ 
    $.getScript("/isv/account.js", function() 
    { 
    $(document).ready(function() 
    { 
    SetUpAccountForm();//call to account.js 
    }); 
    }); 
}); 
}); 

И это приводит к тому, следующее (используя IE8):
Первая страница нагрузки (нет файлов в папке временных файлов Интернета файлы)

  • ошибку, когда попадание $ (document) .ready (function() {})

Загрузка второй страницы (все файлы сейчас во временных интернет файлов папок)

  • страница/нагрузок функций тонкодисперсных

нажмите F5 (обновления)

  • ошибка при ударе $ (документ) .ready (функция() { })

Куда я иду не так? Это потому, что я добавляю ссылку на скрипт jQuery дважды?

В обоих случаях ошибка читает:

There was an error with this field's customized event.
Field:window
Event:onload
Error:Object expected

ответ

2

Я думаю, что проблема в том, что к тому времени, вы попали в .ready функцию $ (документ) в первый раз, Jquery загружается не полностью ... вставка тега скрипта не означает, что скрипт сразу готов к использованию ...

Во второй раз, когда вы загружаете его, файлы js уже находятся в кеше, поэтому загрузка выполняется намного быстрее, но когда вы нажимаете F5, он перезагружает все с сервера, и вы вернетесь в первый случай.

вы могли бы решить эту проблему путем прикрепления функции к OnLoad случае узла сценария, который вы вставляете:

var url = "http://code.jquery.com/jquery-1.4.2.min.js"; 

var head = document.getElementsByTagName("head")[0];   
var scriptNode = document.createElement('script'); 
scriptNode.type = 'text/javascript'; 
scriptNode.src = url; 
scriptNode.onload = jQueryLoaded; 
head.appendChild(scriptNode); 


function jQueryLoaded() 
{ 
    $(document).ready(function() { 
     $("#some").text("Jquery loaded!!") 
    }); 
} 
+0

Я попробую это, когда я вернусь в офис завтра, но это звучит на месте, спасибо за код примера! – glosrob

+0

Отлично работает, спасибо – glosrob

0

Add JQuery как webresource, обернуть код (другой веб-ресурс) внутри родной javascript и добавить событие для формы OnLoad, вызывающего эту функцию. Не забудьте разместить jquerywebresource перед пользовательским кодом. см. пример here.