繁体   English   中英

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

[英]Is it possible to use JavaScript in one document to change HTML in another?

例如:

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将位于另一个文件的标记中,但会编辑第一个文件的内容。 这可能吗? 如果是这样,怎么样?

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

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

  1. 在第一页上,使用一些javascript来设置cookie,然后在第二页加载时,读取该cookie并让第二页中的javascript根据cookie值进行调整。 Cookie可以在同一域中的页面之间共享。
  2. 在第一页上,使用一些javascript来创建一个查询参数(在URL中看起来像这样的东西?show=true 。当你加载第二页时,通过附加?show=true请求该页面(或者你编写的任何东西)到URL的末尾。当第二个页面加载时,它可以检查它的URL上的查询参数并决定如何修改自己。这是将临时参数从一个页面传递到下一个页面的最简单方法页。
  3. 将第二页加载到iframe(嵌入到第一页)中,当加载时,您的javascript可以修改它(如果它是从与主页相同的域提供的)。
  4. 将第二页加载到您的第一页,实际将其插入原始页面,或者将其添加或替换一些现有内容。 然后,第一页的javascript可以在插入后从第二页修改HTML。
  5. 打开一个新页面,其中包含新页面。 如果它与您在同一个域中,那么您的javascript可以进入该新页面并进行修改。

注意:当两个页面不具有相同的源(例如,相同的域)时,浏览器会尝试阻止页面修改。 请参阅相同原始策略的说明 因此,如果您的问题与不同域上的页面有关,那么您需要找到一种不同的方法来解决您的问题。 像加载项这样的东西有时可以绕过同源策略,但是由于众多安全原因,常规页面javascript无法实现。

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

是否可以在一个文档中使用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';
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM