我正在創建一個包含Frame小部件的DialogBox。我曾嘗試使用addLoadHander和addAttachHandler掛鉤來嘗試捕獲對框架的更改,但沒有成功。只有最初的頁面加載觸發這兩個事件,並且經過一些研究後,看起來這兩個實際發生在Widget連接到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響應經由形式立即重新提交本身回我的服務器。一旦提交回到我的服務器完成並且框架中的文檔已經加載,我正試圖捕獲幀的主體。我也試圖使用JSNI方法,它使用MutationObserver(got the code from this solution)來嘗試和觀察框架,但我相信JSNI實際上是在父級內運行,而不是在Frame(?)內部運行,所以什麼都不會發生。
我也嘗試過使用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);
}-*/;
有沒有人有任何想法,我怎麼能做到這一點?
即使觀察工作,我不認爲你可以得到的內容由於瀏覽器限制,因爲它是來自另一個域的頁面。 –