2015-03-11 6 views
0

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

Я занимаюсь различными вещами на этой странице, однако один из них - загрузить iframe на основе выбранного номера, а затем, после того как загрузка iframe захватит соответствующие детали, которые мне нужны с этой страницы.

Я написал код для этого внутри функции frameLoaded, и я устанавливаю это как событие onload, но сценарий все еще работает с ошибкой, где он не может найти .innerHTML элемента.

Если я загружаю iframe, а затем выполняю этот скрипт, он работает нормально, однако, если я попытаюсь загрузить iframe и выполнить скрипт вместе, он будет работать с этой ошибкой.

Вот код, я использую:

//Getting text currently in the textarea 
var selectedTxt = document.getElementById('txtEmailText').value; 

//Converting it to a string - this is just for troubleshooting purposes that I've used two variables 
var insertText = selectedTxt.toString(); 

//Loads in the highlighted purchase number 
var purchaseNumber = window.getSelection(); 
purchaseNumber = purchaseNumber.toString(); 

//Declares global variables to hold the title and number 
var purchaseTitle; 
var purchaseNumber; 

//Function to execute code to grab title and number once the frame has loaded 
function frameLoaded() { 
var iframe = document.getElementById('purchaseIframe'); 
var innerDoc = iframe.contentDocument || iframe.contentWindow.document; 
      purchaseTitle = innerDoc.getElementById('listingTitle'); 
      purchaseNumber = innerDoc.getElementById('auctionSoldIdDisplay'); 
     } 


//Checks to see if a purchase number has been selected 
if(purchaseNumber.length > 0){ 

var purchaseIframe = document.createElement('iframe'); 
purchaseIframe.src = 'http://www.mysite.co.nz/Admin/Listing/PurchaseDisplay.aspx?asid=' + purchaseNumber + '&submit1=++GO++'; 
purchaseIframe.setAttribute("height","1000"); 
purchaseIframe.setAttribute("width","100%"); 
purchaseIframe.setAttribute("id","purchaseIframe"); 
purchaseIframe.setAttribute("onload", "frameLoaded();"); 
void(document.body.appendChild(purchaseIframe)); 
} 

//Converting the value in the title to readable text 
purchaseTitle = purchaseTitle.innerHTML; 

//Placing the values in to the format I need 
var purchaseDetails = purchaseTitle + " - " + purchaseNumber; 

//Placing the values in to the string to go back in to the email textarea 
insertText = insertText.replace("PURCHASEDETAILS", purchaseDetails); 

//Pasting the variable in to the textarea 
document.getElementById('txtEmailText').value = insertText; 

Могу ли я сделать что-то здесь не так, или используя неправильные события, как мне кажется, что, возможно, он пытается захватить значения до IFrame полностью загружена, следовательно, ошибка, когда я генерирую iframe в одно и то же время.

Пожалуйста, обратите внимание, что я не могу использовать JQuery

+0

Вы пробовали 'purchaseIframe.setAttribute ("OnLoad", "frameLoaded");' вместо 'purchaseIframe.setAttribute ("OnLoad", "frameLoaded();");'? –

ответ

0

window.onload = функция() ваш ответ.

Обратите внимание, что в примере ниже первый экземпляр document.getElementById ('mydiv') возвращает значение null, поскольку страница (DOM) еще не загружена и, следовательно, ни один из них не был div.

Второй экземпляр запускается на windows.onload, что означает, что все содержимое страницы присутствует и поэтому может быть найдено.

<script type='text/javascript'> 
console.log("Page not ready:" + document.getElementById('mydiv')); 
window.onload = function() { 
    console.log("Page ready:" + document.getElementById('mydiv')); 
} 
</script> 

<div id="mydiv"> 

</div> 
+0

Извините, если это звучит глупо, но где я могу разместить это в своем коде? Я попытался поставить его рядом с функцией 'window.onload = function frameLoaded' и' purchaseIframe.setAttribute ("window.onload", "frameLoaded();") ;, но я не слишком уверен, что делать с это потому, что у меня нет доступа для редактирования кода на странице iframe. – James

+0

Вы действительно хотите запустить свой код внутри этой функции onload. В качестве альтернативы вы можете сделать что-то вроде window.onload = init(); function init() { // все ваши вещи } –

+0

Просто, чтобы уточнить, у меня нет доступа к коду в iframe, чтобы добавить этот код. Итак, как я могу добавить это в скрипт, выполняемый в iframe, когда он загружается? – James