我们正在使用使用ajax和jquery等的网络程序(Netsuite)。我想在页面上更改某些内容并尝试使用document.ready和window.load来获取页面上加载的外部脚本。我试图在头部和身体中加载外部脚本..但内容没有写入。外部文件查找特定的div id,然后为其添加一些代码。它永远不会起作用,因为页面本身会动态加载,而div我会在页面的其余部分完成时查找加载。所以window.load等等永远不会工作......
最后,我在程序本身加载了零件,我试图简单地在那里编写外部脚本文件。现在这次外部文件中有一个简单的document.write,所以它很简单。换句话说,脚本位于页面正文中的html代码中间。 (我知道这是一种可怕的方式,但是我必须尝试一些方法来实现它......)
根据firebug,它将外部文件写入应该的位置(检查!)并且firebug向我显示该文件的内容(检查!),但是......它永远不会写入'它在页面上......
该文件只包含:
document.write('<div id="shpblk" style="border:2px solid #ffa500;border-radius:7px;color:#000066;margin:5px;padding:5px;text-align:left;"><img border="0" width="12" height="12" src="/images/icons/store/icon_exclamation2c.gif">Hazardous conditions blahblah... Potential delays and disruptions can be anticipated.</div>');
我错过了什么?
编辑:需要进一步澄清......:
情况:我必须每次都能在页面上放一段html,然后创建一条消息。
环境:我所拥有的是一个首先加载页眉和页脚的页面(在单独的文件中设置)然后需要一秒左右来加载页面的其余部分。根据我的理解,这个&#34;页面的其余部分&#34;是用某个代码编写的,类似于javascript / jquery。
我能做的是:编辑页眉和页脚的文件,并在其中放置javascript以修改页面的其余部分。我可以访问一些包含&#34;页面其余部分&#34;的部分文件,但这是一大堆意大利面。
我尝试过的事情: 因为我想要灵活处理我需要放入页面的html,所以我最好想在另一个网站上创建一个javascript或html或其他任何内容,并拥有&#34;环境&#34;拿起那段代码。我可以使用javascript或iframe执行此操作。但由于它是一个安全区域(https),我认为最好使用javascript文件而不是iframe。所以....
我创建了javascript文件并在正常的环境中尝试了,我知道它确实会起作用..它就像一个魅力。但是当我在前面提到的环境中尝试过这种情况时,我正在墙上奔跑......
javascript文件中包含document.ready jquery语句,它会将html div添加到页面上的现有div。 这样它就可以加载页面并编写页面..很容易就像馅饼一样。
但是..由于页眉和页脚首先加载(包括外部脚本文件),然后是页面的其余部分,SOMEHOW脚本检查的div不会存在。所以我尝试了window.load而不是document.ready。结果相同。 现在,它只会在我刷新页面时出现。所以可能有办法让它刷新页面,但我只希望这是绝对的最后一次尝试。
然后我试着看看我是否可以通过更改脚本来解决这个问题,而不是使用document.ready它只会做一个简单的javascript document.write语句。 然后我在页面正文的中间调用脚本(我把它放在页面中间加载的一个文件中)。我知道这不是我通常会做的事情,但无论如何都想尝试一下。所以....我会有这样的事情:
<div id="block1">
<div id="block2">stuff here<div>
<script type="text/javascript" src="https://someotherdomain.com/include.js" ></script>
<div id="block3">stuff here<div>
<div id="block4">stuff here<div>
</div>
现在当我运行它时,我没有得到任何错误,但是没有对该js文件的内容进行任何操作。在firebug中,它显示了该文件的内容,但是我认为它正在被阅读。 但我不知道它为什么不运行。
再次..回到&#39; normal&#39;实践:我已经尝试过window.load,因为这会在页面加载后运行语句,但是,就像我之前说过的那样,我感觉它通过这种方式构建了(中间)页面的内容我的脚本在此之前运行;它找不到它前面的div(block3)。每当我停止在我的脚本上运行页面时,它取决于尚未存在的div ...
我希望这是有道理的......
答案 0 :(得分:0)
要使外部脚本文件按预期工作,OP需要使用如下的异步脚本标记加载它:
<script type="text/javascript" src="include.js" ></script>
然而,该文件包含document.write()语句,这通常是要避免的。一个更好的选择是从文件中删除document.write()并将其保存为纯HTML文件。然后可以使用jQuery安全地加载它:
$("#include1").load("include.html");
(需要将目标DIV添加到内容应加载的页面。)
<强>详情
问题并没有告诉我们页面上是如何包含外部文件的。如果没有这些信息,很难理解问题或提供解决方案......这可能是为什么这个问题没有得到解决的原因。
然而,让我们假设脚本是使用JavaScript或jQuery注入客户端的页面。如果这是真的那么如果没有以正确的方式完成它将会失败。
让我们看看我们可以将脚本添加到页面的一些方法:
这些脚本标记都将失败,因为该文件包含document.write语句,并且脚本是异步加载的。
<script type="text/javascript" src="include.js" async ></script>
<script type="text/javascript" src="include.js" defer ></script>
<script type="text/javascript" src="include.js" async defer ></script>
浏览器确实加载了该文件,但报告:
无法执行&#39;写&#39;在&#39;文件&#39;:不可能写 从异步加载的外部脚本转换为文档,除非 它被明确地打开了。
这种 jQuery 类型的作品。它加载脚本,但 document.write 隐式调用 document.open ,它会删除页面的原始内容。这可能不是OP想要的。
$.getScript('include.js');
只要document.write在加载时执行,即不在稍后调用的函数内,这种同步方法就可以工作。所以这是OP的可能解决方案。
<script type="text/javascript" src="include.js" ></script>