是否可以在一个文档中使用JavaScript来更改另一个文档中的HTML?

时间:2011-09-21 01:42:42

标签: javascript html

例如:

function change() { document.getElementById('identification').href = "http://www.stackoverflow.com"; }

关联的HTML(重要位)

<a href="#" id="identification">Stack Overflow</a>
<input type=button value="Change" onclick="change()" />

这会将我的代码中的href更改为http://www.stackoverflow.com,但是我想从其他HTML文件中执行此操作? JavaScript将位于另一个文件的标记中,但会编辑第一个文件的内容。这可能吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:5)

Javascript仅存在于特定页面的生命周期中,因此您无法将一个文件中的代码修改为另一个尚未卸载的文件。

根据您的用户体验,有一些选择:

  1. 在第一页上,使用一些javascript来设置cookie,然后在第二页加载时,读取该cookie并让第二页中的javascript根据cookie值进行调整。 Cookie可以在同一域中的页面之间共享。
  2. 在第一页上,使用一些javascript来创建一个查询参数(在一个看起来像这个?show=true的网址后面的那些东西。当你加载第二页时,通过附加{来请求该页面{1}}(或任何你编写的)到URL的末尾。当第二个页面加载时,它可以检查它的URL上的查询参数并决定如何修改自己。这是从中传递临时参数的最简单方法一页到下一页。
  3. 将第二页加载到iframe(嵌入到第一页)中,当它加载时,您的javascript可以修改它(如果它是从与主页相同的域提供的)。
  4. 将第二页加载到您的第一页,实际将其插入原始页面,或者将其添加或替换您现有的部分内容。然后,第一页的javascript可以在插入后从第二页修改HTML。
  5. 打开一个新页面,其中包含新页面。如果它与您在同一个域中,那么您的javascript可以进入该新页面并进行修改。
  6. 注意:当两个页面不具有相同的来源(例如,同一个域)时,浏览器会尝试阻止页面修改。请参阅same origin policy的说明。因此,如果您的问题与不同域上的页面有关,那么您需要找到一种不同的方法来解决您的问题。附加组件之类的东西有时可以绕过同源策略,但是由于众多安全原因,常规页面javascript无法实现。

答案 1 :(得分:1)

因为我找不到一个我认为匹配的问题足以作为完全重复关闭,我会发布一个答案:

  

是否可以在一个文档中使用JavaScript来更改另一个文档中的HTML?

是的,假设两个窗口都在同一个安全沙箱中。

  

若然,怎么样?

这很简单,你需要从你想要访问的window的上下文中调用DOM函数。

获取新窗口对象的一种简单方法是调用window.open

var newWin = window.open(newpage)

newWin是一个window对象,因此它有一个document对象以及它可能已加载的所有其他DOM元素。就像任何其他窗口一样,如果您尝试与页面上加载的元素进行交互,则需要等待document.readywindow.onload

newWin.onload = function(){
  var ident = newWin.document.getElementById('identification');
  ident.href = 'http://stackoverflow.com';
};