由于跨源策略,iframe中的WordPress登录阻止了JavaScript重定向

时间:2019-03-20 09:00:30

标签: javascript wordpress iframe cross-domain same-origin-policy

需要帮助!我有一个wordpress网站作为父域

https://www.example.com

我在同一个父级的子域中有一个Angular / JavaScript应用

https://site.example.com

我能够解决CORS问题,因此Wordpress父登录页面(wp-login.php)在子域的iframe中可以很好地加载,但是当我尝试根据iframe url索引重新加载window.location时,就会出现问题。这是我的iframe JavaScript代码

(function () {
    app
        .controller('ModalGuestPopupController', [
            '$scope', '$rootScope', 'socket', 'ngDialog', '$window',
            function ($scope, $rootScope, socket, ngDialog, $window) {

                $rootScope.$on('ngDialog.opened', function (e, $dialog) {
                    angular.element('.menu .item').tab();

                    angular.element("#login-iframe").get(0).onload = function() {
                        checkLogin($window);
                    };
                });

                function checkLogin($window) {

                    var iframe = angular.element('#login-iframe');
                    var currentUrl = iframe.get(0).contentWindow.location.href;

                    if(currentUrl.indexOf('wp-login.php') == -1) {
                        $window.location.reload();
                    } else {
                        setTimeout(checkLogin, 1000, $window);
                    }
                }

            }]);
})();

这是浏览器控制台(Chrome和Firefox)上的错误消息

iframe.controller.js:20 

Uncaught DOMException: Blocked a frame with origin "https://subdomain.example.com" from accessing a cross-origin frame.
at checkLogin (https://subdomain.example.com/app/controllers/iframe.controller.js:20:35)
at HTMLIFrameElement.angular.element.get.onload (https://subdomain.example.com/app/controllers/iframe.controller.js:11:25)

0 个答案:

没有答案