如何在工人接受HIT之前隐藏HIT中外部网页的链接

时间:2013-03-23 17:20:59

标签: javascript amazon-web-services mechanicalturk

在Amazon Mechanical Turk上,我在HIT中包含一个链接到外部网页,工作人员将在该网页上执行实际的HIT。但是,我想隐藏工人的链接,直到他们接受HIT。

这可以通过在创建HIT时在页面上添加一些JavaScript来完成吗?或者这必须通过MTurk API或Boto

等库来完成

1 个答案:

答案 0 :(得分:4)

Amazon会在打开外部网页时传递url查询字符串中的变量。对于此用例,您需要查看assignmentId。如果assignmentIdASSIGNMENT_ID_NOT_AVAILABLE,则工作人员正在预览HIT。 (mturk docs中的更多信息。)

您可以使用以下javascript获取这些变量:

var assignmentId = $.getUrlVar('assignmentId');
var workerId = $.getUrlVar('workerId');
var hitId = $.getUrlVar('hitId');
if (assignmentId == "ASSIGNMENT_ID_NOT_AVAILABLE"){
  // Worker is previewing the HIT
}
else {
  // Worker has accepted the HIT
}

其中$getUrlVar是一个简单的jquery插件:

$.extend({
  getUrlVars: function(){
    // From http://code.google.com/p/js-uri/source/browse/trunk/lib/URI.js
    var parser = /^(?:([^:\/?\#]+):)?(?:\/\/([^\/?\#]*))?([^?\#]*)(?:\?([^\#]*))?(?:\#(.*))?/;
    var result = window.location.href.match(parser);
    var scheme    = result[1] || null;
    var authority = result[2] || null;
    var path      = result[3] || null;
    var query     = result[4] || null;
    var fragment  = result[5] || null;

    if (query === null || query === undefined) {
      return {};
    }
    var vars = [], hash;
    var hashes = query.split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  }
});