我上传了两个网络资源, a.HTML 和 b.JS 。在HTML文档中,我有一个部分,其中执行脚本(并且它按预期工作)将加载上载到我的表单上的IFRAME中。
现在,由于代码的大小,我觉得有必要重构它,我想将我的HTML Web资源的脚本标记中的一些方法移出到单独的JS Web资源。
在第一步,我按如下方式设置了单独的JS Web资源。
function test() { alert("Success."); }
从HTML文档中的脚本执行以下操作,得到错误,因为 test 似乎不为页面所知。
alert("Get ready for test...");
test();
alert("Did it work?");
我已经将JS网络资源添加到表单并保存发布,当然。关于这个主题的信息很少令人惊讶。我找到了这些链接,但没有一个与我需要的完全匹配,也没有提示如何处理手头的问题。
我应该纠正什么?
答案 0 :(得分:2)
从Microsoft Dynamics CRM中的HTML网络资源中调用JavaScript网络资源中的函数
CRM 2015
Javascript网络资源:
function test() { alert("Success."); }
HTML网络资源:
window.parent.test();
CRM 2016
它们现在在iframe中加载HTML网络资源,因此您无法访问外部js文件,但可以访问XRM对象。因此,您可以将函数放在该对象上。
Javascript网络资源:
Xrm.Page.test = test;
function test() { alert("Success."); }
HTML网络资源:
window.parent.Xrm.Page.test();
答案 1 :(得分:1)
我认为你的test()函数在你的html文档窗口的范围内。 当你从iframe的文档中调用它时,它会在其范围内搜索test()。
试试
alert("Get ready for test...");
parent.window.test();
alert("Did it work?");
如果在iframe中定义了test(),并且您正在从HTML文档中调用它,请尝试此操作。
alert("Get ready for test...");
document.getElementById("iframeId").src ="javascript:test();"
alert("Did it work?");
答案 2 :(得分:1)
检查以下假设:
parent.window.test()
?如果是到上面的所有,请做三件事。
(那个,我的意思是你肯定错过了我提供的列表中的某些内容,而且你不需要联系微软,猪也不会开始飞,地狱赢了不要冻结。)