Функция обратного вызова приемника событий не вызывается - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь отправить пользовательское событие из источника iFrame к родителю.Я сослался на Html5 - Пост-сообщение кросс-браузерного Iframe - дочерний к родительскому? , но я все еще не могу передать событие своему родителю.

Ниже приведен код из исходного кода iFrame.куда я отправляю событие родителю:

window.parent.postMessage('onWidgetDisplayed', '*');

В моем родителе у меня есть файл контроллера angularJS, где я пытаюсь прослушать это событие:

angular.module('common.controllers.vaultV2', [])
.controller('VaultV2Controller', ['$scope', '$rootScope', '$sce', function($scope, $rootScope, $sce) {

        $scope.iframeUrl = $sce.trustAsResourceUrl("https://some-url");

        window.addEventListener('onWidgetDisplayed', onWidgetDisplayedEvent, false);

        function onWidgetDisplayedEvent() {
            alert("onWidgetDisplayed event received at parent");
        }

}]);

И вот HTML-файл:

<div style="align: center">
    <iframe id="vault" ng-src="{{iframeUrl}}" style="width: 100%; height: 300px;  overflow: hidden" target="_parent"></iframe>
</div> 

Я что-то не так делаю?Я не вижу ошибок в консоли браузера.Пожалуйста, помогите!

1 Ответ

0 голосов
/ 05 октября 2018

postMessage отправляет событие message, а не onWidgetDisplayed, поэтому вы хотите перехватить событие message.Если вам нужно отправить несколько типов сообщений, вы можете передать любое произвольное значение JavaScript в качестве данных события.Вы уже передаете строку, поэтому:

window.addEventListener("message", function(e) {
    if (/* check `e.origin` and make sure you're happy with it*/) {
        if (e.data === "onWidgetDisplayed") {
            onWidgetDisplayed.call(this, e);
        }
    }
}, false);
...