Chrome Расширения: Как запустить функцию js в контексте текущей веб-страницы - PullRequest
0 голосов
/ 15 апреля 2020

манифест. json

{
    "manifest_version": 2,
    "name": "F",
    "version": "1.0",    
    "icons": {
            "16": "images/empty_16.png",
            "32": "images/empty_32.png",
            "48": "images/empty_48.png",
            "64": "images/empty_64.png",
            "128": "images/empty_128.png"
    },

    "content_scripts": [
        {
            "matches": [ "https://*/","http://*/"],
            "js": [ "scripts/extract.js"],
            "run_at": "document_end"
        }
    ],
    "permissions": ["http://*/","https://*/"],
    "browser_action": {
          "default_icon": {
            "16": "images/empty_16.png",
            "32": "images/empty_32.png",
            "48": "images/empty_48.png",
            "64": "images/empty_64.png",
            "128": "images/empty_128.png"
          },
          "default_title": "F",
          "default_popup": "popup/popup.html"
    }
}

всплывающее окно. html

<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <script src="popup.js"></script>
  <title></title>
  </head>
  <body>
    <button id="get_ids">Get IDs</button>
    <button id="get_ans">Get Ans</button>
    <button id="send_ans">Send Ans</button>
  </body>
</html>

всплывающее окно. js

var wait={};
document.addEventListener('DOMContentLoaded', function () {
    document.getElementById('get_ids').addEventListener('click', getIDS());
    document.getElementById('get_ans').addEventListener('click', getAns(wait));
    document.getElementById('send_ans').addEventListener('click', sendAns());
})

function getIDS(){
    // on first page, with 'user' rights
    //some POST requests with fetch, need to be run on web page context, just like from console
    //JSON answer from server needs to be saved somwhere, example answer: wait = {"tasks_count":2,"tasks":[{"id":00001,"num":1},{"id":00002,"num":2}]};
}

function getAns(wait){
    // on second page, with 'admin' rights
    //some fetches to server while not all IDs from wait are in quests.
    //should save somewhere object with answers named quests.
}

function sendAns(){
    // on first page
    //should send some fetches based on current page location
    //fetch example: fetch("<https address>/rest/secure/api/answer/<variant id>/<question id>", {"headers": {<some headers>},
    //"body": "{\"answer\":{\"id\":\"<id>\",\"@answer_type\":\"answer/single\"}}",
    //"method": "POST",
    //"mode": "cors",
    //"credentials": "include"});
    // answer types are different, can be extracted from json from second page (getAns function).
}

извлечение. js пусто

Ожидаемая работа: Нажмите кнопку «Получить идентификаторы» на странице «пользователя», объект ожидания должен быть обновлен с извлеченными данными. Затем на странице «admin» нажмите «Get Ans», объект квеста теперь должен содержать необходимые вопросы (с идентификаторами из объекта ожидания), вопросы - это массив объектов {id:XXX,question:"",content:[],answers_hr:{},answers_send:{}} (answers_hr удобен для чтения, answers_send - это то, что отправлять через sendAns ()). Затем на странице 'user' нажмите Send Ans, функция sendAns должна вызывать () на сервер для каждого вопроса ожидания, кроме вопросов с типом "answer / free". Когда появляется этот тип, сценарий должен остановиться, предупредить пользователя, чтобы он вводил ответ во входных данных, отправил его и продолжил.

Реальность: Сценарии не выполняются. Будут ли объекты сохранены для разных страниц? Если нет то как их перенести?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...