Първо, двата кадъра трябва да се изпълняват в един и същи домейн, защото браузърите ще попречат на кода в един кадър да има достъп до нещо в другия кадър, ако са различни домейни. Ако двете рамки не са в един и същи домейн, тогава iframe ще трябва да се наблюдава и да уведоми другата рамка, когато приключи с използването на нещо като window.postMessage()
.
Ако са в един домейн, това е малко сложно. Трябва да получите елемента iframe (това е във вашия основен документ). Трябва да изчакате това да е готово (тъй като трябва да зареди собственото си съдържание). След това трябва да получите документа в iframe. След това можете да намерите желаното изображение в iframe. След това можете да наблюдавате съдържанието му. И, разбира се, можете да направите всичко това само ако iframe е същият домейн като основната ви страница (поради ограниченията за сигурност).
Първо добавете идентификатор към iframe:
<iframe id="myFrame" seamless width="100%" frameborder="0" height="80%" src="http://fritz.box/usb/usb_diskcut.lua?usbdev=all"></iframe>
След това можете да използвате това:
// put this code in your document AFTER the iFrame tag
// or only run it after the DOM is loaded in your main document
function checkImageSrc(obj) {
if (obj.src.indexOf("/finished_ok_green.gif") !== -1) {
// found the green gif
// put whatever code you want here
} else {
// check repeatedly until we find the green image
setTimeout(function() {
checkImageSrc(obj);
}, 2000);
}
}
// get the iframe in my documnet
var iframe = document.getElementById("myFrame");
// get the window associated with that iframe
var iWindow = iframe.contentWindow;
// wait for the window to load before accessing the content
iWindow.addEventListener("load", function() {
// get the document from the window
var doc = iframe.contentDocument || iframe.contentWindow.document;
// find the target in the iframe content
var target = doc.getElementById("uiView_TestPic");
checkImageSrc(target);
});
За информация, тук има повече подробности относно изчакването на iframe да бъде готов: Как мога да получа достъп до DOM елементите в iFrame
Ако контролирате кода във вградената рамка, тогава много по-чист начин за прилагане на това би бил да използвате window.postMessage()
за публикуване на съобщение в родителския прозорец, когато кодът във вградената рамка приключи своята работа. След това родителският прозорец може просто да изслуша това едно съобщение и ще знае кога операцията е извършена.
Това може да изглежда нещо подобно. Поставете този код в iframe:
// put this code in your document AFTER the relevant image tag
// or only run it after the DOM is loaded in your iframe
// if you can hook into the actual event that knows the unmount
// is done, that would be even better than polling for the gif to change
function checkImageSrc(obj) {
if (obj.src.indexOf("/finished_ok_green.gif") !== -1) {
// found the green gif
// notify the parent
window.parent.postMessage("unmount complete", "*");
} else {
// check repeatedly until we find the green image
setTimeout(function() {
checkImageSrc(obj);
}, 2000);
}
}
// find the target in the iframe content
var target = document.getElementById("uiView_TestPic");
checkImageSrc(target);
След това в основния си прозорец ще чуете публикуваното съобщение по следния начин:
window.addEventListener("message", function(e) {
// make sure this is coming from where we expect (fill in the proper origin here)
if (e.origin !== "http://example.org:8080") return;
if (e.data === "unmount complete") {
// unmount is complete - put your code here
}
});
person
jfriend00
schedule
04.08.2014
#uiView_TestPic
във вградената рамка ли е? - person haxxxton   schedule 04.08.2014uiView_TestPic
е в iframe, различен от този, в който се изпълнява JS, тогава трябва да получите документа от iframe и да използвате тозиdocument
сgetElementById()
. Текущият ви код търси в текущия ви документ, но снимката е в друг документ. - person jfriend00   schedule 04.08.2014