MAJOR EDIT 1 以下是我原始问题的描述,但我发现了 Chrome和Firefox都正确加载库。它是 IE 9/10 即使重复刷新, 根本不会工作。但是,一旦我打开 开发人员控制台并重新加载一切正常。
我已阅读this post有关此问题的信息,并按照概述的步骤操作。问题是jQuery在IE 9/10,Chrome或Firefox中无法可靠/一致地加载。
我也无法以100%的可靠性重复这个问题。但是,通常发生的事情是,在我发布自定义Web资源的更改并重新加载表单后,我将在开发人员控制台中获得“jQuery is undefined”。后续重新加载不会显示错误,如果我在重新加载之前清除缓存,则行为似乎没有差异。
以下是我实施的一些细节:
如果需要,我很乐意提供更多信息和/或截图。
// Fetch XML generic fetch format
function genericFetch(entity, targetField, returnFields, searchSource)
{
returnFields = returnFields.split('|');
var searchValue = Xrm.Page.getAttribute(searchSource).getValue();
if(searchValue)
{
searchValue = searchValue[0]['values'][1]['value'];
}
else
{
return false;
}
function onFetchError(xhr, status, errorThrown)
{
var errormsg = $(xhr.responseXML).find('Message').text();
alert('CrmFetchKit-Error occured: ' + errormsg);
}
var fetchXml = ['<fetch version="1.0" output-format="xml-platform" mapping="logical">'];
fetchXml.push('<entity name="' + entity + '">');
var len = returnFields.length;
for(i=0; i<len; i++)
{
fetchXml.push('<attribute name="' + returnFields[i] + '" />');
}
fetchXml.push('<filter type="and">');
fetchXml.push('<condition attribute="' + returnFields[0] + '" operator="eq" value="' + searchValue + '" />');
fetchXml.push('</filter>');
fetchXml.push('</entity>');
fetchXml.push('</fetch>');
fetchXml = fetchXml.join('');
CrmFetchKit.Fetch(fetchXml).then(function (results) {
/* success handler */
console.log("results: " + JSON.stringify(results, null, 4));
Xrm.Page.getAttribute(targetField).setValue(results[0]['attributes']['productnumber']['value']);
}, onFetchError);
}
答案 0 :(得分:3)
这是由于脚本中的这行代码所致:
console.log("results: " + JSON.stringify(results, null, 4));
在IE中,默认情况下未定义控制台对象(这可能是因为MS CRM始终处于IE8文档模式,我不确定,但我在其他网站上看到过此问题)。
只要打开开发人员工具窗口,就会定义控制台对象,代码就会开始工作。
我在MS CRM的所有脚本中的解决方案是:为控制台对象定义一个空的覆盖,如果它未定义,例如
var _f_ = function () { };
window.console = window.console || { log: _f_, error: _f_, info: _f_, debug: _f_, warn: _f_, trace: _f_, dir: _f_, dirxml: _f_, group: _f_, groupEnd: _f_, time: _f_, timeEnd: _f_, assert: _f_, profile: _f_ };
答案 1 :(得分:2)
这可能是由于您的脚本在加载jQuery之前运行。即如果脚本没有包裹在:
$(document).ready( function() {
// Your code...
});
或
$(window).load( function() {
// Your code...
});
您的方案中$(window).load(...);
可能会取得更大成功。
这似乎是最可能的,因为它是间歇性的问题。然而;我还建议查看你的代码是否与另一个脚本有冲突,例如,如果首先加载与jQuery冲突的脚本,那么它可能会阻止jQuery正常工作。
您可以使用以下内容解决此问题:
(function( $ ) {
// Put code using jQuery via '$' here...
}(jQuery));