1

アクセスが狂気で拒否されたonloadため、関数でJavaScriptを使用してリモートサーバーにリクエストを送信できませんでした。そこで、CRMに準拠させるために、 IFRAMEを設定し、JavaScriptを実行しているHTMLページに接続します。さて、スクリプト内でいくつかの値を取得した場合(IFRAMEで実行)、保持している親のメソッドにそれらをどのように伝達できますか?

詳細な説明方法がよくわからないので、お気軽にお問い合わせください。

4

3 に答える 3

2

アクセスが拒否されるのは同一生成元ポリシーです。ページを提供している場合、または後でAJAX要求を行おうとしている同じサーバーからのスクリプトsrcだけを提供している場合を除いて、IFRAMEから同じ問題が発生します。

後者を実行していると仮定すると、CRMフォームに追加したIFRAMEの[クロスフレームスクリプトを制限する]オプションがオフになっていることを確認する必要があります。これで、IFRAMEから、を介して親CRMフォームのグローバルスコープで定義した関数にアクセスできるようになりますwindow.parent.yourfunctionNameHere(xyz)

于 2012-11-26T22:38:55.107 に答える
2

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

于 2013-01-16T03:30:08.850 に答える
1

最近、私はWebサービスに接続して、いくつかのデータを取得することができました。それが達成されたとき、私はそれをどこに置くべきか正確にわからない、言われたデータに座っていることに気づきました。

簡単に言うと、次のソースコードを使用しました。

parent.window.Xrm.Page.data.entity.attributes
  .get("new_Konrad").setValue("Viltersten");

注目すべきは、親フォームと通信するために、HTMLファイル(私のJavaScriptが存在する場所)をCRM構造内にWebリソースとして配置する必要があるという事実です。つまり、外部の「<em> http://some.where/some.thing」をポイントするだけで、サービスを利用できますが、取得した情報をCRMサーバーに伝達することはできません。少なくともオンラインバージョンのソリューションを開発するとき。

于 2013-01-20T21:21:27.267 に答える