脚本在页面加载之前执行
Script executing before page load
我已经完成了一个脚本,该脚本在包含电子邮件所在的文本区域的页面上运行。
我正在此页面上做各种事情,但是其中之一是根据选定的数字加载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
window.onload = function() 是你的答案。
请注意,在下面的示例中,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>
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 如何在从浏览缓存加载页面时执行javascript
- Jquery:代码在rails中的页面加载时未执行
- 如何准确执行加载脚本&退出弹出窗口
- 页面在我的javascript执行后重新加载,我不希望它这样做
- 加载服务器端渲染的React组件后执行脚本
- jQuery-在页面加载时执行一个函数
- ajax加载了内容,脚本没有执行
- 如何在加载完整页面后严格执行javascript代码
- 在动态加载的对话框中执行Javascript
- Dojo AMD加载程序执行定义具有空/缺失依赖项的回调
- 通过AJAX加载页面并执行javascript和CSS
- 在外部JS执行后加载JavaScript
- 如何在Ajax加载新内容时停止JavaScript执行
- Chrome扩展:加载窗口后执行脚本
- LABjs错误:脚本总是使用.script()来执行加载的序列
- 执行加载更多函数时的LIMIT子句
- 动态加载的SVG;似乎不再执行加载函数了
- ie7不使用jquery执行加载的脚本