Javascript 除非IE开发者控制台打开,否则不会加载我的CRM 2011 web资源
主要编辑1以下是对我的原始版本的描述,但我发现 Chrome和Firefox都正确加载了库。现在是9/10 这根本不起作用,即使反复刷新。然而,一旦我打开 开发人员控制台和重新加载一切工作正常 我已经阅读了有关该问题的内容,并遵循了概述的步骤。问题是jQuery在IE 9/10、Chrome或Firefox中的加载不可靠/不一致 我也无法100%可靠地重复这个问题。然而,通常发生的情况是,在我发布自定义web资源中的更改并重新加载表单后,我将在开发人员控制台中获得“jQuery未定义”。随后的重新加载不会显示错误,并且如果在重新加载之前清除或不清除缓存,行为似乎没有什么不同 以下是我的实施的一些细节:Javascript 除非IE开发者控制台打开,否则不会加载我的CRM 2011 web资源,javascript,jquery,dynamics-crm-2011,Javascript,Jquery,Dynamics Crm 2011,主要编辑1以下是对我的原始版本的描述,但我发现 Chrome和Firefox都正确加载了库。现在是9/10 这根本不起作用,即使反复刷新。然而,一旦我打开 开发人员控制台和重新加载一切工作正常 我已经阅读了有关该问题的内容,并遵循了概述的步骤。问题是jQuery在IE 9/10、Chrome或Firefox中的加载不可靠/不一致 我也无法100%可靠地重复这个问题。然而,通常发生的情况是,在我发布自定义web资源中的更改并重新加载表单后,我将在开发人员控制台中获得“jQuery未定义”。随后的重
- 我正在使用依赖于jQuery的CrmFetchKit库
- 为了实现这一点,我将这两个库合并为一个web资源。这背后的想法是,错误总是来自CrmFetchKit,它告诉我,正确地包含该文件没有问题
- 下面是我的代码李>
- 我的函数“genericFetch()”是在onChange事件处理程序中为我的实验表单上的查找属性设置的
- 当jQuery可用时,一切都按预期工作(即使js非常难看)
// 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);
}
//获取XML通用获取格式
函数genericFetch(实体、targetField、returnFields、searchSource)
{
returnFields=returnFields.split(“|”);
var searchValue=Xrm.Page.getAttribute(searchSource.getValue();
如果(搜索值)
{
searchValue=searchValue[0]['values'][1]['value'];
}
其他的
{
返回false;
}
函数onFetchError(xhr、状态、错误抛出)
{
var errormsg=$(xhr.responseXML.find('Message').text();
警报('CrmFetchKit-发生错误:'+errormsg);
}
var fetchXml=[''];
fetchXml.push(“”);
var len=returnFields.length;
对于(i=0;i),这可能是由于您的脚本在jQuery加载之前运行所致。例如,如果脚本未包装在:
$(document).ready( function() {
// Your code...
});
或
使用$(窗口)。在场景中加载(…);
可能会更成功
这似乎是最有可能的,因为这是一个间歇性问题。但是,我还建议检查您的代码是否与另一个脚本冲突,例如,如果先加载与jQuery冲突的脚本,那么它可能会阻止jQuery正常工作
您可以使用以下方法解决此问题:
(function( $ ) {
// Put code using jQuery via '$' here...
}(jQuery));
这可能是由于您的脚本在加载jQuery之前运行所致。例如,如果脚本未包装在:
$(document).ready( function() {
// Your code...
});
或
使用$(窗口)。在场景中加载(…);
可能会更成功
这似乎是最有可能的,因为这是一个间歇性问题。但是,我还建议检查您的代码是否与另一个脚本冲突,例如,如果先加载与jQuery冲突的脚本,那么它可能会阻止jQuery正常工作
您可以使用以下方法解决此问题:
(function( $ ) {
// Put code using jQuery via '$' here...
}(jQuery));
这是由于脚本中的这行代码造成的:
console.log("results: " + JSON.stringify(results, null, 4));
在IE中,控制台对象在默认情况下是未定义的(这可能是因为MS CRM始终处于IE8文档模式,我不确定,但我在其他网站上看到过这个问题)
一旦打开“开发人员工具”窗口,console对象就被定义,代码开始工作
我在所有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_ };
这是由于脚本中的这行代码造成的:
console.log("results: " + JSON.stringify(results, null, 4));
在IE中,控制台对象在默认情况下是未定义的(这可能是因为MS CRM始终处于IE8文档模式,我不确定,但我在其他网站上看到过这个问题)
一旦打开“开发人员工具”窗口,console对象就被定义,代码开始工作
我在所有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_ };
我应该提到这一点(我似乎总是漏掉一些重要的细节),但实际上我删除了“document ready”子句,因为,出于我对JS无法理解的原因,CRM会抱怨genericFetch未定义。(实际上,我认为这是有意义的,因为CRM并不理解jQuery。)我应该提到这一点(我似乎总是漏掉一些重要的细节),但实际上我删除了“document ready”子句,因为,出于我对JS无法理解的原因,CRM会抱怨genericFetch未定义。(实际上,我认为这是有意义的,因为CRM并不理解jQuery。)我最近发现了此问题,但完全忘记更新我的帖子。抱歉,社区!也发生在SharePoint中,没有关于控制台未定义的错误或警告,但如果使用控制台语句,JSON将不起作用。我最近发现了此问题,但完全忘记更新我的帖子。抱歉,社区!也发生在SharePoint中,没有错误或警告关于控制台未定义的警告,但如果使用console语句,JSON将不起作用