Ошибка Salesforce Lightning CORS: не удалось выполнить postMessage в DOMWindow - PullRequest
0 голосов
/ 24 мая 2019

Сводка: у нас есть приложение-молния Salesforce, которое прекрасно работает в dev-организации, но как только мы создадим управляемый пакет и установим его в других организациях, если произойдет сбой с этой ошибкой CORS:

Не удалось выполнить «postMessage» в «DOMWindow»: предоставлен целевой источник (‘https://ashoktest -dev-ed.lightning.force.xn - com-to0a ) не соответствует происхождению окна получателя ( «https://ashoktest -dev-е изд - blusign.ap15.visual.force.xn - ком-to0a )

.

Вот шаги по воспроизведению проблемы в простом приложении молнии

1) Создайте пользовательскую кнопку по возможности по следующей формуле. "/ Вершина / namespace__testHelloVFpage" Назовите эту кнопку testHello. Перетащите и отпустите эту кнопку на странице возможностей, чтобы использовать ее.

2) Создайте страницу Visual Force, используя приведенный ниже код, и назовите ее testHelloVFpage

<apex:page sidebar="true" showHeader="true" standardController="Opportunity">
    <apex:includeLightning />
    <center><div id="lightning" style="margin-left:1%;max-width:75%;margin-bottom:2%;"/></center>
<script >
    $Lightning.use("namespace:testHelloEsignPageApp", function() {
        $Lightning.createComponent("namespace:testHelloEsignLC",
        {},
        "lightning",
        function(component) {window.$Force = sforce;});
    });

</script>
</apex:page>

3) Создайте приложение Lightning с помощью приведенного ниже кода и назовите его testHelloEsignPageApp

<aura:application access="GLOBAL" extends="ltng:outApp">
    <aura:dependency resource="namespace:testHelloEsignLC"/>
</aura:application>

4) Создайте комплект компонентов Lightning, используя приведенный ниже код компонента, и назовите его testHelloEsignLC

<aura:component implements="force:appHostable,flexipage:availableForAllPageTypes,flexipage:availableForRecordHome,force:hasRecordId,forceCommunity:availableForAllPageTypes,force:lightningQuickAction" 
                access="global" >
########### This is a Test Component ###############
    <br></br>
    ***********   Hello ESign *************
</aura:component>

5) Теперь, когда мы нажмем пользовательскую кнопку, созданную на первом шаге, она покажет нам эту страницу молнии. Нет проблем

ПРИМЕЧАНИЕ: - nameSpace в приведенном выше коде является доменным именем.

НО

Как только мы создадим управляемый бета-пакет или управляемый пакет и установим его в любую редакцию для разработчиков или любые другие доменные организации, мы получим страницу BLANK А ошибки в INSPECT Element Console следующие. Я также не получаю никаких журналов.

Не удалось выполнить «postMessage» в «DOMWindow»: целевой источник при условии (‘https://ashoktest -dev-ed.lightning.force.xn - com-to0a ) делает не соответствует происхождению окна получателя . ( «https://ashoktest -dev-е изд - blusign.ap15.visual.force.xn - ком-to0a )

И

typeError - ошибка не определена

И

Uncaught TypeError: Невозможно прочитать свойство split из undefined at displayErrorText (lightning.out.delegate.js? v = 1558631590920: 70) at lightning.out.delegate.js? v = 1558631590920: 178 в XMLHttpRequest.xhr.onreadystatechange (lightning.out.delegate.js? v = 1558631590920: 112)

Попробовал следующее:

  1. проверил, если мы пропустили какие-либо пространства имен, и это не проблема.
  2. Пробовал URL-адрес источника жесткого кодирования в разделе navigateToURL, чтобы открыть страницу из компонента - не удалось.
  3. Попытка пропустить события любого рода, которые запускаются в компоненте для навигации и использовали window.open, ничего не сделала.
  4. Попытка открыть эту страницу в URL путем добавления идентификаторов вручную для обхода вызывающего компонента (подписать с компонентом BluSign в пользовательском интерфейсе) и получить ту же ошибку.
  5. Попытка включения режима разработки для пользователя.

1 Ответ

1 голос
/ 24 мая 2019

Компоненты Lightning и VF-страницы обслуживаются из разных доменов.То, как страницы VF и компоненты Lightning взаимодействуют друг с другом, использует window.postMessage, в котором вы должны указать целевой домен.Я подозреваю, что во фрагменте, который вы указали, Salesforce использует window.postMessage за кулисами для установки свойства окна верхнего уровня, когда вы используете управляемый пакет.Возможно, вы захотите обработать это явно, используя window.postMessage в своем коде, как объяснено здесь

...