我可以在用户单击链接后操作DOM吗?
Can I manipulate the DOM after the user clicks a link?
我试图理解浏览器的行为一旦链接被点击,或表单已提交-任何操作,这是由用户触发,并以他们在一个新的URL登陆结束。我被要求在按钮和链接上安装一些跟踪代码,这依赖于更新一个不可见的iframe的src
属性。
所以-我的具体问题是:
-
我可以依赖的DOM是可操作的,一旦用户点击了一个链接?也就是说,我可以更新节点上的属性吗?在新页面加载之前,是否能保证更新成功?
-
是由这些操作(例如,我给一个iframe一个新的
src
属性)触发的任何请求可靠吗?显然,当请求完成时,新页面已经加载,但是也有可能(但可能无法跟踪)请求已经成功发出。
我的直觉是,这两个都不可靠——我自己肯定不会写这样的系统。我真的在寻找参考或规范,这样我就可以用更好的方式来做这件事。
谢谢!
所有操作完成后可以继续加载页面。这样的:
document.body.addEventListener('click', function(e){
if(e.target.tagName.toLowerCase() === 'a'){
e.preventDefault();
var href = e.target.getAttribute('href');
// do your job here
window.location.href = href; // navigate
}
});
小提琴
总之,No.
一旦URL改变了(并且导航完全离开了页面),现在的DOM就完成了。在等待点击动作生效和新页面加载的过程中,在极少数情况下可能会发生更改,但这是非常不可靠的。
在web应用程序中处理跟踪的正常方式是在服务器端进行跟踪,因为这显然委托了用户被导航到的位置。
对于一个纯粹的客户端跟踪实现,您需要提供一个钩子,它捕获点击操作,进行任何跟踪,然后在跟踪过程完成后执行所需的操作。实现这一点的一种方法是创建一个文档范围的click事件,它拦截所有的click,跟踪所有信息,然后根据需要委托操作。另一种方法是为导航链接定义自己的点击事件,不幸的是,我个人只能提供一个jQuery代码片段,而不是标准的JavaScript。
'karaxuna'提供的解决方案很好地演示了纯JavaScript中的文档作用域机制。
对于有助于强调为什么后导航处理不可靠的文档,请参考以下链接:
web应用程序的W3导航计时您必须在允许事件完成之前'拦截'它。这是用jquery最容易做到的。你可以这样做:
$(document).on(
"click",
'.button',
function(e){
//do fancy stuff like update the iframe here
});
- 如何从JavaScript中的HTML字符串中操作DOM
- 使用jQuery.resize()操作DOM
- AngularJS在HTML渲染后使用JQuery操作DOM
- 使用 jQuery 操作 DOM 对象
- 如何使用温泉UI操作DOM
- 在 html 页面上,javascript 是以编程方式操作 DOM 的唯一方法吗?
- 继续加载.gif在操作 DOM 时进行动画处理
- 无法在 AJAX 成功函数中操作 DOM
- 在jQuery的XML文档中选择和操作DOM中的元素
- 有哪些方法可以使客户端更难操作 DOM
- 在JS操作DOM并传递请求标头后获取生成的HTML
- JQuery Mobile:操作DOM后的访问ID
- 使用 jQuery 操作 DOM 时,代码不同步
- 如何在运行perl机械化脚本时操作DOM元素
- 使用 JavaScript 或 jquery 操作 DOM 元素
- 在Javascript中操作DOM的简单方法
- JavaScript:不操作DOM的动态脚本加载
- 在单击提交后操作DOM,其中请求需要一段时间
- 在React+Redux.js应用程序中,在Provider组件之外操作DOM元素的正确方法是什么
- 如何在Dynamics CRM中使用jQuery操作DOM