我们的应用程序加载jQuery 1.10.2,然后从Intuit加载https://appcenter.intuit.com/Content/IA/intuit.ipp.anywhere.js
。 Anywhere脚本正在向头部添加<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
并重新加载jQuery。
这会擦除命名空间并破坏我们的大部分代码。脚本不应该看到jQuery已经加载了吗?我们如何防止重新加载jquery?
谢谢, 福雷斯特
答案 0 :(得分:2)
问题似乎是window.jQuery.fn.jquery < "1.4.2"
返回false,因为'1.10.2' < '1.4.2'
也会返回false。这是因为javascript会将其视为1.1.2 < 1.4.2
。另一种选择是删除|| window.jQuery.fn.jquery < "1.4.2"
如果您确定要包含jQuery,只需更改附加脚本标记的代码部分。
在脚本的底部。变化
// function that starts it all. timeout is 0
(function() {
// these are the domains whose js files we're going to look at
// intuit.ipp.ourDomain = /(.intuit.com).*?#(.*)/;
intuit.ipp.ourDomain = /intuit.com$/;
if(window.jQuery === undefined || window.jQuery.fn.jquery < "1.4.2") {
// minimum version 1.4.2
var script_tag = document.createElement('script');
script_tag.setAttribute("type","text/javascript");
script_tag.setAttribute("src", "https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js");
script_tag.onload = function () {
if(window.jQuery) {
intuit.ipp.jQuery = window.jQuery.noConflict(true);
intuit.ipp.anywhere.windowLoad();
}
};
script_tag.onreadystatechange = function () { // Same thing but for IE
if (this.readyState == 'complete' || this.readyState == 'loaded') {
script_tag.onload();
}
};
// Try to find the head, otherwise default to the documentElement
(document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
} else {
// we do have jquery
intuit.ipp.jQuery = window.jQuery;
intuit.ipp.anywhere.windowLoad();
}
})();
要
// function that starts it all. timeout is 0
(function () {
// these are the domains whose js files we're going to look at
// intuit.ipp.ourDomain = /(.intuit.com).*?#(.*)/;
intuit.ipp.ourDomain = /intuit.com$/;
// we do have jquery
intuit.ipp.jQuery = window.jQuery;
intuit.ipp.anywhere.windowLoad();
})();
答案 1 :(得分:1)
Spokey给出的解决方案部分正确。
为了在本地提供Anywhere脚本,您还需要对代码进行一些修改,以允许域指向Intuit站点。这样,蓝点菜单上的CSS和应用程序链接被正确地重定向到Intuit的域。
(注意:更新intuit.ipp.ourDomain
变量将不会如上所述。)
以下是我修改的内容:
第20-40行包含:
windowLoad : function() {
intuit.ipp.jQuery(document).ready(function () {
intuit.ipp.jQuery('script').each(function (){
// check if this script file is from our domain
if (!this.src) {
return;
}
var jsSrc = this.src;
var jsSrcParts = jsSrc.replace(/http[s]?:\/\//, '').split('/');
var qs = intuit.ipp.ourDomain.exec(jsSrcParts[0]);
if(!qs) {
qs = document.domain.match(intuit.ipp.ourDomain);
}
if (!qs || !jsSrcParts[jsSrcParts.length - 1].match('intuit.ipp.anywhere') || !jsSrc.match(/:\/\/(.[^/]+)/)) {
return;
}
// get ipp's domain
intuit.ipp.anywhere.serviceHost = jsSrc.match(/:\/\/(.[^/]+)/)[1];
我替换为:
windowLoad : function() {
intuit.ipp.jQuery(document).ready(function () {
intuit.ipp.jQuery('script').each(function (){
// check if this script file is from our domain
if (!this.src) {
return;
}
var jsSrc = this.src;
var jsSrcParts = jsSrc.replace(/http[s]?:\/\//, '').split('/');
var qs = intuit.ipp.ourDomain.exec(jsSrcParts[0]);
// if(!qs) {
// qs = document.domain.match(intuit.ipp.ourDomain);
// }
if (!jsSrcParts[jsSrcParts.length - 1].match('intuit.ipp.anywhere') || !jsSrc.match(/:\/\/(.[^/]+)/)) {
return;
}
// get ipp's domain
//intuit.ipp.anywhere.serviceHost = jsSrc.match(/:\/\/(.[^/]+)/)[1];
intuit.ipp.anywhere.serviceHost = "appcenter.intuit.com";