Во-первых, оба фрейма должны работать в одном и том же домене, потому что браузеры предотвратят доступ кода в одном фрейме к чему-либо в другом фрейме, если они находятся в разных доменах. Если два фрейма не находятся в одном домене, то 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: iframe/24603642#24603642">Как я могу получить доступ к элементам DOM в iFrame
Если вы управляете кодом в iframe, то более простым способом реализации этого будет использование window.postMessage()
для отправки сообщения в родительское окно, когда код в iframe завершит свою работу. Затем родительское окно может просто прослушать это единственное сообщение и узнать, когда операция будет выполнена.
Это может выглядеть примерно так. Поместите этот код в 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
внутри iframe? - person haxxxton   schedule 04.08.2014uiView_TestPic
находится в другом iframe, отличном от того, где работает JS, вам нужно получить документ из iframe и использовать этотdocument
сgetElementById()
. Ваш текущий код ищет ваш текущий документ, но изображение находится в другом документе. - person jfriend00   schedule 04.08.2014