我迫切需要一些帮助。
我创建了一个 <script> ,它与我在别处编写的另一个更复杂的 <script> 非常相似,并重现了该问题。
这是它的作用:
- 创建一个 <iframe> 并插入到页面上的 <div> 中
- 创建一个文档并将其附加到该 <iframe>,其中包含一个定义一些函数的 <script>(包括一个回调函数和一个使用 AJAX 加载外部 <script> 的函数)
- 后一个外部脚本只是对回调函数的调用,它调用一个创建文档并将其附加到它所在的 <iframe> 的函数;这应该有效地覆盖 <script>
涉及的三个文件是:
- http://troy.onespot.com/static/document_write/index.html(主页)
- http://troy.onespot.com/static/document_write/main.js(加载的第一个 <script> )
- http://troy.onespot.com/static/document_write/jsonp.js(由 jQuery 的 $.ajax() 方法加载的 <script> )
这一切都适用于 Firefox、Safari 和 Chrome。它在 Internet Explorer 和 Opera 中出现故障。发生的情况是 main.js 中的 render() 函数执行,所有三个警报都被触发,但 <iframe> 中的文档没有被覆盖。我不知道正在创建或写入什么文件,或者根本就没有。
如果我在 render() 函数的开头添加调试代码(如 console.log(document)),工作浏览器似乎可以处理现有的 <iframe> 文档并列出下面包含的属性。Internet Explorer 似乎也能找到某种文档。我只是不知道为什么它不让我覆盖它。
会不会是范围问题?也许我不正确地使用了 document.write()、document.open() 或 document.close() 方法,而 Firefox 和其他一些浏览器只是让我侥幸逃脱?
一个可能的线索:如果我取出 render() 函数的胆量(即,将它们放在 main.js 中的 load() 之后),这可以正常工作。这向我表明,这不是我使用 document.open() 等的方式,而是在执行 callback() 函数时,文档对象不可用或超出范围,或类似的东西。
这让我完全被难住了,这是一个非常重要的项目,截止日期即将到来。如果它能让我摆脱困境,我不会超越黑客或解决方法。任何帮助或见解将不胜感激!
console.log() 的文档属性列表:
属性节点:2
CDATA_SECTION_NODE:4
COMMENT_NODE:8
DOCUMENT_FRAGMENT_NODE:11
DOCUMENT_NODE:9
DOCUMENT_POSITION_CONTAINED_BY:16
DOCUMENT_POSITION_CONTAINS:8
DOCUMENT_POSITION_DISCONNECTED:1
DOCUMENT_POSITION_FOLLOWING:4
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC:32
DOCUMENT_POSITION_PRECEDING:2
DOCUMENT_TYPE_NODE:10
ELEMENT_NODE:1
实体节点:6
ENTITY_REFERENCE_NODE:5
NOTATION_NODE:12
PROCESSING_INSTRUCTION_NODE:7
文本节点:3
网址:“http://localhost/projects/test/ajax_loader/document_write/index.html”
活动元素:HTMLBodyElement
addEventListener: 函数 addEventListener() {
采用节点:函数采用节点(){
链接颜色:“”
全部:HTMLCollection
锚点:HTMLCollection
appendChild: 函数 appendChild() {
小程序:HTMLCollection
属性:空
baseURI:“http://localhost/projects/test/ajax_loader/document_write/index.html”
背景颜色:“”
正文:HTMLBodyElement
捕获事件:函数捕获事件(){
字符集:“UTF-8”
字符集:“UTF-8”
子节点:节点列表
清除:函数清除(){
克隆节点:函数克隆节点(){
关闭:函数关闭(){
compareDocumentPosition: 函数 compareDocumentPosition() {
compatMode:“BackCompat”
cookie:“__gads=ID=62bb88ab20ac9451:T=1256683145:S=ALNI_Mbso-nFjAvRzYhCSwhiuaDh84G8CA”
创建属性:函数创建属性(){
createAttributeNS: 函数 createAttributeNS() {
createCDATASection: 函数 createCDATASection() {
createComment: 函数 createComment() {
createDocumentFragment: 函数 createDocumentFragment() {
创建元素:函数创建元素(){
createElementNS: 函数 createElementNS() {
createEntityReference: 函数 createEntityReference() {
创建事件:函数创建事件(){
createExpression: 函数 createExpression() {
createNSResolver: 函数 createNSResolver() {
createNodeIterator: 函数 createNodeIterator() {
createProcessingInstruction: 函数 createProcessingInstruction() {
创建范围:函数创建范围(){
createTextNode: 函数 createTextNode() {
createTreeWalker: 函数 createTreeWalker() {
默认字符集:“iso-8859-1”
默认视图:DOMWindow
设计模式:“关闭”
目录:“”
调度事件:函数调度事件(){
文档类型:空
文档元素:HTMLHtmlElement
documentURI:“http://localhost/projects/test/ajax_loader/document_write/index.html”
域:“本地主机”
elementFromPoint: 函数 elementFromPoint() {
嵌入:HTMLCollection
评估:函数评估(){
执行命令:函数执行命令(){
fg颜色:“”
第一个孩子:HTMLHtmlElement
表单:HTMLCollection
getCSSCanvasContext: 函数 getCSSCanvasContext() {
getElementById: 函数 getElementById() {
getElementsByClassName: 函数 getElementsByClassName() {
getElementsByName: 函数 getElementsByName() {
getElementsByTagName:函数 getElementsByTagName() {
getElementsByTagNameNS: 函数 getElementsByTagNameNS() {
getOverrideStyle: 函数 getOverrideStyle() {
获取选择:函数获取选择(){
hasAttributes: 函数 hasAttributes() {
hasChildNodes: 函数 hasChildNodes() {
hasFocus: 函数 hasFocus() {
身高:150
图片:HTMLCollection
实现:DOMImplementation
进口节点:函数进口节点(){
输入编码:“UTF-8”
插入前:函数插入前(){
isDefaultNamespace: 函数 isDefaultNamespace() {
isEqualNode: 函数 isEqualNode() {
isSameNode: 函数 isSameNode() {
isSupported: 函数 isSupported() {
jQuery1258269389622:2
lastChild: HTMLHtmlElement
最后修改: ””
链接颜色:“”
链接:HTMLCollection
本地名称:空
地点:地点
查找名称空间URI:函数查找名称空间URI(){
查找前缀:函数查找前缀(){
命名空间URI:空
下一个兄弟姐妹:空
节点名称:“#document”
节点类型:9
节点值:空
规范化:函数规范化(){
打开:函数打开(){
所有者文档:空
父元素:空
父节点:空
插件:HTMLCollection
首选样式表集:空
前缀:空
上一个兄弟姐妹:空
queryCommandEnabled: 函数 queryCommandEnabled() {
queryCommandIndeterm: 函数 queryCommandIndeterm() {
查询命令状态:函数查询命令状态(){
查询命令支持:函数查询命令支持(){
查询命令值:函数查询命令值(){
查询选择器:函数查询选择器(){
querySelectorAll: 函数 querySelectorAll() {
就绪状态:“完成”
推荐人:“http://localhost/projects/test/ajax_loader/document_write/index.html”
释放事件:函数释放事件(){
removeChild: 函数 removeChild() {
removeEventListener: 函数 removeEventListener() {
替换孩子:函数替换孩子(){
脚本:HTMLCollection
选定样式表集:空
样式表:样式表列表
文本内容:空
标题:“页面”
vlink颜色:“”
宽度:300
写:函数写(){
writeln: 函数 writeln() {
xml编码:空
xml独立:假
xml版本:空