アクセスが狂気で拒否されたonload
ため、関数でJavaScriptを使用してリモートサーバーにリクエストを送信できませんでした。そこで、CRMに準拠させるために、 IFRAMEを設定し、JavaScriptを実行しているHTMLページに接続します。さて、スクリプト内でいくつかの値を取得した場合(IFRAMEで実行)、保持している親のメソッドにそれらをどのように伝達できますか?
詳細な説明方法がよくわからないので、お気軽にお問い合わせください。
アクセスが狂気で拒否されたonload
ため、関数でJavaScriptを使用してリモートサーバーにリクエストを送信できませんでした。そこで、CRMに準拠させるために、 IFRAMEを設定し、JavaScriptを実行しているHTMLページに接続します。さて、スクリプト内でいくつかの値を取得した場合(IFRAMEで実行)、保持している親のメソッドにそれらをどのように伝達できますか?
詳細な説明方法がよくわからないので、お気軽にお問い合わせください。
アクセスが拒否されるのは同一生成元ポリシーです。ページを提供している場合、または後でAJAX要求を行おうとしている同じサーバーからのスクリプトsrcだけを提供している場合を除いて、IFRAMEから同じ問題が発生します。
後者を実行していると仮定すると、CRMフォームに追加したIFRAMEの[クロスフレームスクリプトを制限する]オプションがオフになっていることを確認する必要があります。これで、IFRAMEから、を介して親CRMフォームのグローバルスコープで定義した関数にアクセスできるようになりますwindow.parent.yourfunctionNameHere(xyz)
。
postMessageはそれが合うかもしれないように聞こえます。
window.postMessage
、呼び出されると、実行する必要のある保留中のスクリプトが完了すると、MessageEventがターゲットウィンドウにディスパッチされます(たとえば、window.postMessageがイベントハンドラーから呼び出された場合の残りのイベントハンドラー、以前に設定された保留中のタイムアウトなど)。MessageEventには、タイプmessage、window.postMessageに提供された最初の引数の文字列値に設定されるdataプロパティ、時間ウィンドウでwindow.postMessageを呼び出すウィンドウ内のメインドキュメントの起点に対応するoriginプロパティがあります。 postMessageが呼び出され、window.postMessageが呼び出されるウィンドウであるソースプロパティ。
window.postMessageを使用するには、イベントリスナーをアタッチする必要があります。
// Internet Explorer
window.attachEvent('onmessage',receiveMessage);
// Opera/Mozilla/Webkit
window.addEventListener("message", receiveMessage, false);
そして、receiveMessage
関数を宣言する必要があります。
function receiveMessage(event) {
// do something with event.data;
}
オフサイトのiframeも、postMessageを介してイベントを適切に送信する必要があります。
<script>window.parent.postMessage('foo','*')</script>
どのウィンドウでも、ウィンドウ内のドキュメントの場所に関係なく、いつでも他のウィンドウでこのメソッドにアクセスして、メッセージを送信できます。したがって、メッセージの受信に使用されるイベントリスナーは、最初に、発信元と場合によっては送信元のプロパティを使用して、メッセージの送信者のIDを確認する必要があります。これは控えめに言っても過言ではありません。オリジンと場合によってはソースプロパティのチェックに失敗すると、クロスサイトスクリプティング攻撃が可能になります。
ソース:https ://developer.mozilla.org/en/DOM/window.postMessage
最近、私はWebサービスに接続して、いくつかのデータを取得することができました。それが達成されたとき、私はそれをどこに置くべきか正確にわからない、言われたデータに座っていることに気づきました。
簡単に言うと、次のソースコードを使用しました。
parent.window.Xrm.Page.data.entity.attributes
.get("new_Konrad").setValue("Viltersten");
注目すべきは、親フォームと通信するために、HTMLファイル(私のJavaScriptが存在する場所)をCRM構造内にWebリソースとして配置する必要があるという事実です。つまり、外部の「<em> http://some.where/some.thing」をポイントするだけで、サービスを利用できますが、取得した情報をCRMサーバーに伝達することはできません。少なくともオンラインバージョンのソリューションを開発するとき。