根据元素是否定义在页面中服务备用外部JavaScript文件
好的,这里是我的第一个问题。根据元素是否定义在页面中服务备用外部JavaScript文件
设置:我们使用基于JavaScript的工具来对我们的着陆页设计进行A/B测试。我需要版本A(控制)链接到一个外部JavaScript文件,而版本B(变体)链接到另一个JavaScript文件。
目标:在控件的底部有一个内部js脚本,用于查看该工具是否实际上服务于A或B,如果为true,哪个服务。结果表明应该链接哪个外部脚本。
问题:无论该工具是否实际上服务于A或B,原始脚本都先链接,然后如果检测到该工具,则在此之后将链接相应的脚本。
这里是我的代码(我提前道歉对任何错误新手):
//script at bottom of original or tool-served control html page template
<script type="text/javascript">
valForTool = function() {
var variationId = _tool_exp[_tool_exp_ids[0]].combination_chosen;
if (variationId == 1) {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'js/scripts.js';
document.body.appendChild(newScript);
};
}
originalValidation = function() {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'js/scripts.js';
document.body.appendChild(newScript);
}
$(function(){
if (typeof _tool_exp_ids !== 'undefined' && typeof _tool_exp_ids[0] !== 'undefined') {
valForTool();
} else {
originalValidation();
};
});
</script>
//end script on control or original template
//script on tool-served variation html template - will run after the above script
<script type="text/javascript">
$(function() {
$('#project_info input[type=submit]').removeAttr('disabled');
$('#project_info').unbind();
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'js/scripts2.js';
document.body.appendChild(newScript);
$('.input_text').parent().addClass('contact_field');
});
</script>
// end script on variation template
任何想法,我做错了吗?我提供了足够的信息吗?谢谢!我喜欢这个网站作为我的问题的参考,但这是我第一次真正发布一个。
缩短下来了一点,好像你只是这样做:
<script type="text/javascript">
$(function(){
if (typeof _tool_exp_ids !== 'undefined' && typeof _tool_exp_ids[0] !== 'undefined') {
var variationId = _tool_exp[_tool_exp_ids[0]].combination_chosen;
if (variationId == 1) {
$.getScript('js/scripts.js', function() {runSecond();});
}
}else{
$.getScript('js/scripts.js', function() {runSecond();});
}
function runSecond() {
$('#project_info input[type=submit]').removeAttr('disabled').unbind();
$.getScript('js/scripts2.js');
$('.input_text').parent().addClass('contact_field');
}
});
</script>
现在看那个,很明显,这两个脚本的运行,无论在那些满足什么样的条件if/else语句,我并没有真正明白你想要做什么,但我会做的第一件事是添加一些console.logs来查看这些if/else语句是否像他们应该的那样工作,然后计算出什么应该在哪些条件下加载脚本等?
感谢您缩短它!我可以在这里做一个if/else if/else语句吗?或者如果&&/else?因为如果variationId == 2(用于变体),我想获取scripts2.js文件而不是scripts.js文件。我有两种情况用于链接第一个脚本:如果测试脚本没有运行,并且它正在运行并为控件提供服务。第三种情况是测试脚本正在运行并提供变体。我正在做更多的日志记录来弄清楚如何监听测试脚本是否正在运行。上述解决方案之前工作过,但现在他们在控件上使用了一个异步代码片段。 – monnie 2012-04-17 22:22:12
更新:现在我看到你是如何包含scripts2.js的。我会试试这个:) – monnie 2012-04-17 22:35:11
如果您登录它们,_tool_exp_ids和_tool_exp_ids [0]是否都是未定义的?因为如果他们不是这个问题的话,他们可能会在上面的代码以外设置它们。 – GillesC 2012-04-17 21:10:50
不回答你的问题,但你应该追加你的js文件到'head'标签和一个更多的建议,你可以使用[$ .getScript()](http://api.jquery.com/jQuery.getScript/)它是更有用。 – ocanal 2012-04-17 21:16:42
感谢您的快速回复!我担心我的问题可能对我应该在此发布的内容太具体。也许更常见的问题是,我可以链接特定的外部JavaScript文件,具体取决于是否触发第三方脚本(在本例中为a/b测试工具)?我正在尝试记录工具ID,结果不一致 - 有时会定义,有时还未定义,即使工具脚本应该触发。 – monnie 2012-04-17 22:00:52