2016-08-14 2 views
1

Пожалуйста, смотрите этот родственный вопрос для фона к этому:Можно ли изменить механизм, загружающий рабочего в общих веб-рабочих?

How can I load a shared web worker with a user-script?

С этим вопросом в виду, я хочу, чтобы изучить возможность (в контексте пользовательского сценария) модифицирующих конструктор Shared работник так что механизм, ответственный за загрузку веб-работника, заменяется функцией GM GM_xmlhttpRequest, которая работает как XMLHttpRequest при игнорировании политик того же происхождения.

Чтобы быть ясным, я пишу сценарий пользователя для переполнения стека, чтобы помочь автоматизировать определенный процесс для себя и других, и мне нужно установить связь между двумя открытыми вкладками SO, которые могут быть выполнены с помощью общего веб-рабочего , однако, если вы посмотрите на соответствующий вопрос, который я привел, есть проблемы с этим.

Можно ли изменить механизм, который загружает рабочего в общих веб-рабочих? Использует ли он родной файл XMLHttpRequest или это какая-то внутренняя функция, которую мы не можем коснуться? Если он может быть изменен, как я могу получить к нему доступ, чтобы выполнить модификацию?

+0

Вы также можете использовать событие 'storage' для связи между вкладками. Не пробовал пользовательский скрипт, хотя должно быть возможно использование '.createObjectURL()', если в одном и том же происхождении? – guest271314

+0

@ guest271314 О! Мой «план B» предполагал использование локального или сеансового хранилища для связи, но я собирался сделать что-то постыдное, чтобы выполнить его: проверьте переменные изменения с постоянным интервалом :(Спасибо, это намного лучше! –

+0

См. Http: // stackoverflow .com/questions/38034647/javascript-session-storage-variable-on-another-page, http://stackoverflow.com/questions/38343802/how-to-pass-data-from-one-html-page-to -second-in-php /. Может также быть возможно использовать 'filesystem:' если вкладки оба с одинаковым исходным кодом – guest271314

ответ

-1

Что вы пытаетесь достичь, используя SharedWorker?

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

Вы можете использовать storage событие для передачи сообщений между вкладками в то же происхождения

В index.html

<!DOCTYPE html> 
<html> 

    <head> 
    </head> 

    <body> 
    <a href="b.html" target="_blank">open b.html</a> 
    <textarea></textarea> 
    <button>click</button> 
    <script> 
     var messages = []; 
     var button = document.querySelector("button"); 
     var textarea = document.querySelector("textarea"); 
     window.addEventListener("storage", function(e) { 
     console.log(e.newValue, JSON.parse(localStorage.getItem("messages"))); 

     }); 
     button.addEventListener("click", function() { 
     messages.push(textarea.value); 
     localStorage.setItem("messages", JSON.stringify(messages)); 
     localStorage.setItem("message", textarea.value); 
     textarea.value = ""; 
     }) 
    </script> 
    </body> 
</html> 

b.html

<!DOCTYPE html> 
<html> 

    <head> 
    </head> 

    <body> 
    <textarea></textarea> 
    <button>click</button> 

    <script> 
    var messages = JSON.parse(localStorage.getItem("messages")); 
     window.addEventListener("storage", function(e) { 
     console.log(e.newValue, JSON.parse(localStorage.getItem("messages"))); 
     }); 
     var button = document.querySelector("button"); 
     var textarea = document.querySelector("textarea"); 
     button.addEventListener("click", function() { 
     messages.push(textarea.value); 
     localStorage.setItem("message", textarea.value); 
     localStorage.setItem("messages", JSON.stringify(messages)); 
     textarea.value = ""; 
     }) 
    </script> 
    </body> 
</html> 

plnkr http://plnkr.co/edit/4nR7Rpu4zXSgTR831vQW?p=preview

Смежные вопросы