Передайте значения в iframe, не используя GET
У меня есть iframe, который я формально создавал, используя url с некоторыми vars, которые я передавал как GET. Можно ли установить исходную страницу и передать переменные как сообщение или что-то еще? Или действительно, если можно как-то добраться до переменных, хранящихся в родителе, я бы тоже был в порядке.
6 ответов
использовать window.parent
изнутри iframe.
в Родительском окне:
window.passingObj = { "key" : "value" };
в iframe:
alert(window.parent.passingObj["key"]); // value
два полезных сообщения:
iframe доступ к родительскому DOM? (iframe для родителей)
вызов кода JavaScript в iframe с родительской страницы (родитель в iframe)
Если вам нужен только доступ в javascript, вы можете использовать hash
.
iframe.src="http://foo.bar/#arg1=1&arg2=2";
и затем на странице вы просто извлекаете их из location.hash.substring(1)
.
это шаблонный код для получения этих args в "карту":
(из моей библиотеки easyXDM)
var query = (function(input){
input = input.substring(1).split("&");
var data = {}, pair, i = input.length;
while (i--) {
pair = input[i].split("=");
data[pair[0]] = decodeURIComponent(pair[1]);
}
return data;
}(location.hash);
query.arg1; // 1
query.arg2; // 2
если обе страницы находятся в одном домене, вы можете получить доступ к переменным, определенным в разделе контейнер из кадра с помощью
parent.varName
для того, что вы говорите, Я понимаю, что вы не хотите использовать url для передачи своего параметра.
в зависимости от того, где выполняется JavaScript у вас есть такие варианты:
-
Если выполняется в окне контейнера, вы сделаете что-то вроде этого
... var el = document.getElementById('targetFrameId'); getIframeWindow(el).someFunction('value1', 'value2', ...); // or getIframeWindow(el).someVariable = {key1:'value1', key2:'value2', ...}; ...
-
Если выполняется в окне iframe, вы бы сделали что-то вроде этого
... window.parent.something ... ;
пристрой
function getIframeWindow(iframe_object) {
var doc;
if (iframe_object.contentWindow) {
return iframe_object.contentWindow;
}
if (iframe_object.window) {
return iframe_object.window;
}
if (!doc && iframe_object.contentDocument) {
doc = iframe_object.contentDocument;
}
if (!doc && iframe_object.document) {
doc = iframe_object.document;
}
if (doc && doc.defaultView) {
return doc.defaultView;
}
if (doc && doc.parentWindow) {
return doc.parentWindow;
}
return undefined;
}