Как сделать postMessage применимым ко всем субдоменам - программирование
Подтвердить что ты не робот

Как сделать postMessage применимым ко всем субдоменам

В window.postMessage второй атрибут указывает домен, на который можно отправить мое сообщение. Есть ли способ указать, что он применим ко всем подобластям.

Проверенные вещи:

iframe.contentWindow.postMessage('The message to send.','http://*.wordpress.com');
iframe.contentWindow.postMessage('The message to send.','http://wordpress.com');
4b9b3361

Ответ 1

Нет, это невозможно.

Единственный сценарий, в котором вы можете помочь себе, заключается в том, что вы знаете, что целевой iframe - из известного конечного набора истоков (например, "http://a.wordpress.com", "http://b. wordpress.com" и "http://c.wordpress.com" ). В этом случае просто создайте запрос postMessage для каждого из истоков, так как только один из них будет успешным, а другие будут терпеть неудачу.

Ответ 2

Возможно, не зная имена всех доменов. Просто получите URL-адрес реферера, и вы действительно получите источник от этого:

var parentOrigin = document.referrer.match(/^.+:\/\/[^\/]+/)[0];

Теперь нужно проверить, соответствует ли URL критериям (заканчивается на wordpress.com), и если да, разрешите сообщение этому конкретному домену.

Работает только до тех пор, пока пользователь не начнет перемещаться внутри iframe где-то еще: реферер будет изменен. Однако реферер может быть сохранен в iframe localStorage, поэтому у вас есть список возможных доменов и вы можете отправить сообщение каждому домену из списка, предложенного Ivan Zuzak

Ответ 3

Вы можете просто проанализировать и src атрибут src в iframe, чтобы определить, принадлежит ли он к правильному домену, и соответственно установить targetOrigin.

yourIframe.onload = function() {
  var a = document.createElement('a');
  a.href = yourIframe.src;

  if (a.host.endsWith('yourdomain.com')) {
    var targetOrigin = a.protocol + '//' + a.host;

    yourIframe.contentWindow.postMessage(yourMessage, targetOrigin);
  }
};