2012-05-29 5 views
0

У меня есть веб-сайтJavascript изменение значений внутри фрейма

www.aplicatii-iphone.ro

и другой

page.html на локальном хосте

<html> 
<head> 
<title>Object References across Iframes</title> 

<script type="text/javascript"> 

window.onload = function(){ 
    var form = document.getElementById('testForm'); 
    form.testBtn.onclick = sendData; 
} 

function notify() { 
    //alert('iframe loaded'); 
    var iframeEl = document.getElementById('ifrm'); 
    if (iframeEl && iframeEl.parentNode && document.createElement) { 
     var newTxt = document.createTextNode('The iframe has loaded and your browser supports it\'s onload attribute.'); 
     var newPara = document.createElement("p"); 
     newPara.className = 'demo'; 
     newPara.appendChild(newTxt); 
     iframeEl.parentNode.insertBefore(newPara, iframeEl); 
    } 
} 

function sendData() { // to form inside iframed document 
    // frames array method: 
    // window.frames['ifrm'].document.forms['ifrmTest'].elements['display'].value = this.form.testEntry.value; 
    var ifrm = document.getElementById('ifrm'); 
    var doc = ifrm.contentDocument? ifrm.contentDocument: ifrm.contentWindow.document; 
    var form = doc.getElementById('search-input'); // <------<< search input 
    form.display.value = this.form.testEntry.value; 
    form.submit(); 
} 

// test in iframed doc 
var counter = 0; 

</script> 
</head> 
<body> 

<form id="testForm" action="#"> 
<p><input type="text" name="testEntry" size="30" value="[enter something]" /> <input name="testBtn" type="button" value="Click Me" /></p> 
</form> 

<iframe name="ifrm" id="ifrm" src="http://www.aplicatii-iphone.ro" onload="notify()" width="900">Sorry, your browser doesn't support iframes.</iframe> 

</body> 
</html> 

И каждый раз, когда я нажимаю кнопку «Click Me», я хочу, чтобы состояние www.aplicatii-iphone.ro было как пользователь, который искал это значение, записанное в «testEntry» извне iframe.

Я пробовал что-то там ... но я не понимаю, что это за помощь?

Я взял пример здесь http://www.dyn-web.com/tutorials/iframes/refs.php

ответ

1

Unfortunatly, это не представляется возможным из-за Same orgin policy.
И изменение значения document.domain-only помогает, если вы попытаетесь подключить субдомен к основному домену.

Редактировать Если вы избегаете же-orgin-проблему с помощью страницы на том же сайте, что это должно работать для вас:

window.frames['ifrm'].document.getElementById("search-input").value = document.getElementsByName("testEntry")[0].value; 
window.frames['ifrm'].document.getElementById("cse-search-box").submit(); 
+0

, так что вы говорите, что это beacause мой браузер? Я читаю статьи, которые вы не можете сделать из-за этой «той же политики orgin». – Master345

+0

Я сказал, что это из-за вашего браузера? :-D Вы правы, это связано с «той же политики orgin». – Christopher

+0

Таким образом, одна и та же политика происхождения - это функция безопасности JavaScript, которая предотвращает доступ к свойствам и методам документов из разных доменов. Другими словами, если содержащий документ и документ iframed не принадлежат к одному домену, попытки ссылаться на объекты друг друга приведут к отказу в доступе или к аналогичным сообщениям об ошибках. ........... это ответ? – Master345

3

Если вы знаете, что вы используете современный браузер, вы можете использовать postMessage для связи между кадрами. Вот хорошая рецензия: http://ajaxian.com/archives/cross-window-messaging-with-html-5-postmessage

Если вам нужно поддерживать устаревшие браузеры, вы можете использовать объект CrossPageChannel для связи между кадрами.

+0

ok, но есть небольшой пример , когда у меня есть страница с большим количеством тегов, мне нужно использовать xpath? потому что я нахожу id hardy, чтобы добраться до значения «search-input» ... – Master345

+0

Действительно спасибо за ссылку postMessage, upvoting один раз не достаточно! – 11684

Смежные вопросы