2016-12-12 3 views
4

У меня есть два сценария. Каждый работает на другой подобласти нашей компании "Example.com".TamperMonkey - сообщение между скриптами на разных поддоменах

Script #1 -- house.example.com 
Script #2 -- bob.fred.example.com 

же домена, различные подобластей.

Когда на house.example.com появляется конкретный элемент, мне нужно отправить сообщение по сценарию работает на bob.fred.example.com

Поскольку расширения Google могут обмениваться сообщениями между расширениями, должен быть способ с TamperMonkey для обмена сообщениями в рамках такое же расширение, между сценариями - особенно если они работают в одном домене второго уровня.

Может ли кто-нибудь указать мне правильное направление? Пример или два будут стоить их веса в золоте.


Update: Хотя Gothdo ссылка Javascript communication between browser tabs/windows как содержащий ответ на этот вопрос, он не в состоянии принять во внимание политика перекрестного происхождения, участвующий. Ни один из ответов в этом ссылочном вопросе не дает четкого ответа на сообщения переходов между браузерами, что было основным моментом этого вопроса. Я сейчас исследовал и решил эту проблему, получая идеи от нескольких источников SO и non-SO. Если этот вопрос снова откроется, я отправлю свое решение.

+3

Это не дубликат для меня. OP задает вопрос о передаче сообщений в TamperMonkey, подобно [сообщениям расширений Chrome] (https://developer.chrome.com/extensions/messaging). – nicovank

+0

@nicovank Это то же самое в Тампермонке. Сценарии Tampermonkey не имеют таких привилегий, как расширения Chrome; они очень похожи на обычные скрипты. –

+2

@ Gothdo Тем не менее, я думаю, что тогда подходящая вещь - дать ответ, говоря, что такого API нет, но можно использовать обычный веб-обмен сообщениями и предоставить ссылку. Это не дубликат, хотя ответ аналогичен. - Особенно потому, что ответ можно было бы улучшить, представив также, как можно использовать ['GM_setValue'] (https://wiki.greasespot.net/GM_setValue), если скрипты были запущены на одной странице. – nicovank

ответ

0

Вы можете использовать GM_getValue, GM_setValue & GM_addValueChangeListener, чтобы достичь межсетевого интерфейса пользователя.

Добавьте следующие строки в свой заголовок сценария пользователя.

// @grant  GM_setValue 
// @grant  GM_getValue 
// @grant  GM_addValueChangeListener 

Следующие строки грубого кода упростят связь между скриптами пользовательского скрипта.

function GM_onMessage(label, callback) { 
    GM_addValueChangeListener(label, function() { 
    callback.apply(undefined, arguments[2]); 
    }); 
} 

function GM_sendMessage(label) { 
    GM_setValue(label, Array.from(arguments).slice(1)); 
} 

Так что вам нужно будет сделать следующее, чтобы отправлять и получать сообщения.

GM_onMessage('_.unique.name.greetings', function(src, message) { 
    console.log('[onMessage]', src, '=>', message); 
}); 
GM_sendMessage('_.unique.name.greetings', 'hello', window.location.href); 

ПРИМЕЧАНИЕ Отправка сообщения может не вызвать обратного вызова, если сообщение было отправлено такое же, как и раньше. Это связано с тем, что GM_addValueChangeListener не срабатывает, потому что значение не изменилось, то есть такое же значение, как раньше, хотя вызывается GM_setValue.

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