Frameウィジェットを含むDialogBoxを作成しています。 addLoadHanderとaddAttachHandlerの両方のフックを使って、フレームの変更を成功させようと試みました。最初のページのロードだけがイベントを発生させ、いくつかの調査の後、ウィジェットがDOMにアタッチされたときに実際に発生し、フレームコンテンツがロードされていないときに両方が実際に発生するように見えます。すぐにフォームを経由して自分のサーバーに戻って自分自身を再提出 - フレームにロードされGWTのフレームコンテンツロードイベント
DialogBox paymentProcessingDialog = new DialogBox(false);
private void submitPayment(String actionURL, String qryString){
Frame processCCWindow = new Frame(actionURL + "?" + qryString);
processCCWindow.addLoadHandler(new LoadHandler() {
@Override
public void onLoad(LoadEvent event) {
//This is called when the frame is attached to the dom
//and not when the document is actually ready so it's
//kinda worthless for my scenario
//Note: the addAttachHandler has the same issue
//***call to JSNI idea (see below)
checkURLChange();
}
});
//...irrelevant code to style the DialogBox
VerticalPanel panel = new VerticalPanel();
panel.add(processCCWindow);
paymentProcessingDialog.setWidget(panel);
paymentProcessingDialog.center();
paymentProcessingDialog.show();
}
URLは、外部サーバ(透明リダイレクトペイパル)からのHTML応答が含まれています。私はサーバーへの提出が完了し、フレーム内のドキュメントがロードされたら、フレームの本体をキャプチャしようとしています。
私はまた、フレームを試してみて、見てMutationObserver(got the code from this solution)を使用していますJSNIメソッドを使用しようとしましたが、私はJSNIは実際に親の内部で実行されていると信じていないフレームの内側に(?)ので、何も起こりません。
また、プレゼンタークラスの別のメソッドをトリガするためにsetTimeoutを使用しようとしましたが、コンソール文が決して起動しないため、MutationObserverのアイデアと同じ問題が発生していると思います。
private static native void checkURLChange()/*-{
new MutationObserver(function(mutations) {
mutations.some(function(mutation) {
if (mutation.type === 'attributes' && mutation.attributeName === 'src') {
console.log(mutation);
console.log('Old src: ', mutation.oldValue);
console.log('New src: ', mutation.target.src);
return true;
}
return false;
});
}).observe(location.href, {
attributes: true,
attributeFilter: ['src'],
attributeOldValue: true,
characterData: false,
characterDataOldValue: false,
childList: false,
subtree: true
});
window.location = "foo";
setTimeout(function() {
@com.myPackage.MyoutPresenter::paymentProcessComplete(Ljava/lang/String;)(document.getElementsByTagName("body")[0].innerText);
console.log("test" + document.getElementsByTagName("body")[0].innerText);
}, 3000);
}-*/;
私はこれをどのように達成することができますか?
でも、私の観察はうまくいくとは思えません。これは別のドメインのページであるため、ブラウザの制限があるためです。 –