Я закончил тем, что использовал обмен сообщениями HTML5 для передачи потенциальных запросов в песочнице вверх и вниз по иерархии iframe.
Например, каждая html-страница во вложенной иерархии iframe имеет доступ к следующему javascript. Если перехваченный запрос сообщения HTML5 не может быть выполнен локально, сообщение передается родителю. Родитель также может передавать сообщения в iframes. Это работает только потому, что все страницы имеют доступ к одному и тому же файлу JavaScript.
// function to handle message request
function messageHandler(argJSON) {
// A collection of available functions for inbound messages
var msgFunctionMap = new Object();
msgFunctionMap.removeBorder = removeBorder;
msgFunctionMap.restoreBorder = restoreBorder;
// ...more
// try execute request
try {
var jsonObj = JSON.parse(argJSON.data);
msgFunctionMap[jsonObj.request](jsonObj.args);
}
catch (err) {
alert(" Request not supported: " + argJSON.data);
}
};
// example function to remove object id x's border if it exists in "this" window, else pass request up
var removeBorder = function (jsonMsg, argObj) {
var xiFrame = document.getElementById("x");
if (xiFrame != null) {
xiOrigWidth = xiFrame.style.borderWidth;
xiFrame.style.borderWidth = '0px';
}
// Otherwise, pass message up else if (window.parent && window.parent.postMessage) {
window.parent.postMessage(jsonMsg.data, "*");
}
};
//... more
// pass predefined message request from child to parent
function messageUpHandler(message) {
if (window.parent && window.parent.postMessage) {
window.parent.postMessage(message.data, "*");
}
};
// Listener for child messages
if (window.addEventListener) {
window.addEventListener("message", messageUpHandler, true);
}