我是一名社会研究人员,并且对网络技术还比较陌生,因此我遇到了一些基本的技术问题,希望社区能够为我提供帮助。我打算提供在线课程,然后与学生进行一些社交实验。本课程部分是通过smartsparrow https://www.smartsparrow.com/提供的,实验部分是通过Otree https://otree.readthedocs.io/en/latest/misc/django.html实现的(如果我理解正确的话,这是Django库)。我必须将实验部分放到课程本身中,这可以通过smartsparrow提供的Iframe完成。他们有一个非常小的图书馆,可以帮助我从smartsparrow提取信息到发布在其iframe(https://github.com/SmartSparrow/simcapi-js)中的网页。有了这个SimCapi库,我就可以将cohortId从smartsparrow提取到我的Otree页面。 在Otree平台中,对于来自Smartsparrow的每个cohortID,我都有单独的URL。因此,我制作了一个简单的Django html页面,其中仅包含纯文本,表示学生将很快被重定向到其教室的正确URL。对于重定向,我只使用了javascript:
<script src='https://lib.smartsparrow.com/simcapi-js-3.1.0.min.js'></script>
<script type="text/javascript">
var simModel = new simcapi.CapiAdapter.CapiModel({
coID: '34dsfd'
});
simcapi.CapiAdapter.expose('coID', simModel,
{alias: 'cohoID'});
simcapi.Transporter.addInitialSetupCompleteListener(init);
function init(args) {
cohortID = simcapi.Transporter.getConfig().cohortId;
console.log(cohortID)
simModel.set('coID', cohortID);
var dict = {
"gsgrrjgk":"https://otreesampleurl.com/hsdfme1/",
"rhg6j816":"https://otreesampleurl.com/hsdfme2/",
"5n2xclm6":"https://otreesampleurl.com/hsdfme3/",
"ipeni2p9":"https://otreesampleurl.com/hsdfme4/",
"iykfjurh":"https://otreesampleurl.com/hsdfme5/",
"bg43ljv3":"https://otreesampleurl.com/hsdfme6/",
"eaa1yy1c":"https://otreesampleurl.com/hsdfme7/",
};
window.location.replace(dict[cohortID]);
};
simcapi.Transporter.notifyOnReady();
</script>
该代码有效,但: (i)主要问题:重定向后,如果他们碰巧刷新了页面,他们将返回到重定向页面,并再次被重定向。因此,他们将必须以新玩家的身份再次进行所有实验。有没有办法防止使用JavaScript? Django可能不错,但坦白地说,我对此并不熟悉。
smartsparrow界面图片和流程图:https://imgur.com/Tt3rQo1
(ii)琐碎的问题(实际上并不需要解决,而只是征求意见):使用上面的代码,有时学生会陷入重定向页面,他们必须刷新才能重定向到作品。在我看来,smartsparrow代码无法及时收集cohortId。我的理论合理吗?