V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
zhuwd
V2EX  ›  JavaScript

关于 js 的一点疑问

  •  
  •   zhuwd · 2019-08-02 16:18:40 +08:00 · 3225 次点击
    这是一个创建于 1975 天前的主题,其中的信息可能已经有所发展或是发生改变。

    后台传来一段 html 代码,这段代码里面嵌入了 js:

    <html>
    <head>
    </head>
    <body>
         /***/
         <script>
            window.onload = function () {
                alert("页面加载完成====》 onload");
            }
        </script>
    </body>
    </html>
    

    前台使用 window.write 将后台传过来的 html 写入到页面上,但是里面的 window.onload 并没有执行,需要手动调用 window.onload();

    请教大佬们这其中的原理是什么?

    11 条回复    2019-08-02 18:08:08 +08:00
    DoveAz
        1
    DoveAz  
       2019-08-02 16:27:08 +08:00
    这能有啥原理啊,你直接写在当前页面,当前页面已经 onload 过了呗,你在新页面打开这段代码才行
    ashong
        2
    ashong  
       2019-08-02 16:29:33 +08:00
    写入代码的时候页面已经加载完了,onload 已经触发过
    cococoder
        3
    cococoder  
       2019-08-02 16:49:30 +08:00
    直接插入整个 html,并不会重新执行啊,这个跟重新加载页面不一样,已经 onload 过了
    beastk
        4
    beastk  
       2019-08-02 16:57:59 +08:00 via iPhone
    试试<img src=1 onerror=alert('onload')>
    Caballarii
        5
    Caballarii  
       2019-08-02 17:00:06 +08:00
    what are you neng 啥嘞
    shintendo
        6
    shintendo  
       2019-08-02 17:03:16 +08:00
    事件又不是 promise,事件错过了就错过了
    mamahaha
        7
    mamahaha  
       2019-08-02 17:04:21 +08:00
    ```js
    window.addEventListener("DOMContentLoaded",()=>{
    alert("页面加载完成====》 onload");
    })
    ```
    Takamine
        8
    Takamine  
       2019-08-02 17:16:05 +08:00
    比较好奇这是个什么业务场景。:dog:
    phxsuns
        9
    phxsuns  
       2019-08-02 17:33:31 +08:00
    你们的技术方案怕是有问题。。。
    zhuwd
        10
    zhuwd  
    OP
       2019-08-02 17:42:57 +08:00
    业务一言难进,是跟京东的合作。。感谢几位老哥!
    greenman0007
        11
    greenman0007  
       2019-08-02 18:08:08 +08:00
    1. 你直接加载的话,后台写过来的 HTM L 应该不要带 <html><head><body> 标签;
    2. 如果页面有引入 jQuery 的话,后台可以用 $(function(){}),这种方式会执行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2652 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:15 · PVG 23:15 · LAX 07:15 · JFK 10:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.