将脚本添加到包含document.write的脚本不会执行

时间:2015-06-05 22:37:32

标签: javascript jquery html netsuite

我们正在使用使用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 ...

我希望这是有道理的......

1 个答案:

答案 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>