除非 IE 开发人员控制台处于打开状态,否则我的 CRM 2011 Web 资源将不会加载
My CRM 2011 web resources will not load unless IE developer console is open
主要编辑 1 以下是我原始问题的描述,但我发现 Chrome和Firefox都正确加载了库。这是IE 9/10 即使反复刷新,这也根本不起作用。但是,一旦我打开 开发人员控制台并重新加载一切正常。
我已经阅读了这篇关于这个问题的文章,并按照概述的步骤进行操作。问题是jQuery在IE 9/10,Chrome或Firefox中无法可靠/一致地加载。
我也无法以 100% 的可靠性重复该问题。但是,通常发生的情况是,在自定义 Web 资源中发布更改并重新加载表单后,我将在开发人员控制台中得到"jQuery is undefined"。随后的重新加载不会显示错误,如果我在重新加载之前清除缓存,行为似乎没有区别。
以下是我的实现的一些细节:
- 我正在使用依赖于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);
}
由于脚本中的以下代码行:
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_ };
这可能是由于您的脚本在 jQuery 加载之前运行。 即,如果脚本未包装在:
$(document).ready( function() {
// Your code...
});
或
$(window).load( function() {
// Your code...
});
在你的方案中,$(window).load(...);
可能会取得更大的成功。
这似乎是最有可能的,因为它是一个间歇性问题。然而;我还建议查看您的代码是否与另一个脚本冲突,例如,如果与jQuery冲突的脚本首先加载,那么它可能会阻止jQuery正常工作。
你可以通过使用这样的东西来解决这个问题:
(function( $ ) {
// Put code using jQuery via '$' here...
}(jQuery));
- Javascript:selenium Web驱动程序isDisplayed()不工作
- 使用Dnamics CRM 2011中的JavaScript读取子网格的所有记录,而不考虑活动页面
- 在Web应用程序中使用Highcharts javascript
- WebDriverException:tinyMCE未在selenium Web driver java中定义
- Selenium Web驱动程序和javascript
- Windows形成web浏览器控件和Javascript更改的DOM
- 如何将javascript事件从web浏览器wpf控件发送到wpf的c#代码
- Steam Web API:I'我不知道该如何处理这个看起来像哈希的url来生成图像
- 在调用speak之前预加载Web Speech API
- 如何在visualstudio中调试web api时编辑javascript文件
- 是否存在React Native“;WEB代码安全防护”;
- 如何在Ionic Android中将Javascript注入到web视图中
- 将复杂对象从angular js传递到web api,它总是返回404
- 基于api密钥的NodeJS web服务
- Javascript 函数在 CRM 2011 HTML Web 资源中无法识别
- CRM 2011:使用 javascript 将值传递给 IFRAME/Web 资源
- 对象不支持属性或方法'setSrc'web Resource in CRM 2011
- CRM 2011:链接到html页面的javascript web资源在IE11中只加载了几秒钟
- 除非 IE 开发人员控制台处于打开状态,否则我的 CRM 2011 Web 资源将不会加载
- 如何在CRM 2011中使用CRM 2011 web服务和JavaScript执行FetchXML