mTurk Parent Window Command Accepter

Updated for the Worker-only (no WWW) world.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         mTurk Parent Window Command Accepter
// @namespace    salembeats
// @version      2.6
// @description  Updated for the Worker-only (no WWW) world.
// @include      https://www.mturk.com/mturk/preview?*
// @include      https://www.mturk.com/mturk/accept?*
// @include      https://www.mturk.com/mturk/continue?*
// @include      https://www.mturk.com/mturk/return?*
// @include      https://worker.mturk.com/projects/*/tasks*
// @icon         http://ez-link.us/sb-png
// @grant        none
// ==/UserScript==

// Targeting just active HITs would be @include https://worker.mturk.com/projects/*/tasks/*?assignment_id=*

(function() {

    let childIFrame = document.querySelector("iframe");
    let childWindow = childIFrame.contentWindow;

    let acceptHITButton = document.querySelector("span[data-react-class*='SubmitAcceptTaskFormButton'] button");

    let secondaryButton = document.querySelector("input[name='authenticity_token']~button.btn.btn-secondary");
    let returnHITButton;
    if(secondaryButton.innerText.trim() === "Return") {returnHITButton = secondaryButton;}

    let reactDetails = JSON.parse(document.querySelector(`div[data-react-class="require('reactComponents/common/ShowModal')['default']"]`).dataset.reactProps).modalOptions;

    window.addEventListener('message', function(event) {
        let receivedObject = event.data;

        if(receivedObject.hasOwnProperty("mTurkParentWindowQuery")) {

            let objectToReplyWith = {};

            if(receivedObject["mTurkParentWindowQuery"] === "accepted") {

                let responseString = "";

                if(returnHITButton) {responseString = "accepted";} else {responseString = "notAccepted";}

                objectToReplyWith["mTurkParentWindowResponse"] = responseString;
            }

            if(receivedObject["mTurkParentWindowQuery"] === "url") {

                objectToReplyWith["urlResponse"] = window.location.href;
            }

            if(receivedObject["mTurkParentWindowQuery"] === "hitDetails") {

                objectToReplyWith["hitDetails"] = JSON.stringify(reactDetails);
            }

            childWindow.postMessage(objectToReplyWith, "*");
        }

        if(receivedObject.hasOwnProperty("mTurkParentWindowAction")) {

            if(receivedObject["mTurkParentWindowAction"] === "accept" && acceptHITButton) {
                acceptHITButton.click();
            }

            if(receivedObject["mTurkParentWindowAction"] === "return" && returnHITButton) {
                returnHITButton.click();
            }

            if(receivedObject.mTurkParentWindowAction === "navigate") {
                window.location.href = receivedObject.url;
            }
        }
    });
})();