Нужно ли мне использовать пространство имен для моего кода JavaScript, если он в <iframe>? - PullRequest
4 голосов
/ 31 октября 2009

Если я напишу какой-нибудь JavaScript, который выполняется в

Я немного погуглил и наткнулся на эту страницу, но не могу понять, что он здесь делает, или относится ли это именно к тому, что я пытаюсь определить / выполнить.

http://dean.edwards.name/weblog/2006/11/sandbox/

Я создаю виджет, который будет жить на неизвестных страницах хоста; это , который вставляет

По сути, я просто хочу избежать конфликтов с любыми глобальными переменными на странице хоста; Я не хочу, чтобы какие-либо скрипты Java, которые я пишу или загружаю в

Если использование

Заранее спасибо за любые рекомендации.

Ответы [ 3 ]

9 голосов
/ 31 октября 2009

Поскольку пространство имен каждого разделено, оно должно быть в порядке. Рассмотрим следующее

Хост-страница JavaScript:

Foo = {};
Foo.bar = function(){ alert('hi!');}

Теперь в iframe JavaScript:

Foo = {};
Foo.bar = function(){ alert('yo!');}

Чтобы iframe говорил с родителем, он должен был бы сделать что-то вроде этого

window.parent.Foo.bar(); //Alerts 'hi!'
Foo.bar(); //Alerts 'yo!'

Чтобы страница хоста увидела фрейм, она должна сделать это:

window.frames['nameOfFrame'].contentWindow.Foo.bar(); //Alerts 'yo!'
Foo.bar(); //Alerts 'hi!'
1 голос
/ 31 октября 2009

При обычном использовании скрипты в iframe и в главном окне изолированы друг от друга.

main.html

<!DOCTYPE html>
<html><head>
</head>
<body>
<script>
function ale(){alert('test');}
</script>
<iframe src="fr.html"></iframe>

</body></html>

fr.html

<input type="button" onclick="ale();" />

Обратите внимание, что когда вы открываете main.html и нажимаете на кнопку в iframe, возникает ошибка Javascript, говорящая о том, что ale (); не определено будет сгенерировано. Это потому, что это два отдельных документа.

Однако вы сможете получить доступ к объекту документа родительского фрейма из iframe, используя узел window.parent. например window.parent.getElementById('mainform')

Краткое описание Нет необходимости указывать пространство вашего кода в iframe.

1 голос
/ 31 октября 2009

Если я правильно понимаю вашу ситуацию, все, что есть в iFrame, должно выходить за рамки остальной части страницы. Однако вы можете ссылаться на код главной страницы, используя parent.

var foo

<iframe>
var bar = parent.foo;
</iframe>

Я знаю, что это не то, как выглядит iframe. Просто пытаюсь упростить.

...