TOGOUTECH

javascript - 如何知道动态创建的脚本标签被执行了?

coder 2024-05-16 原文

我正在动态创建脚本标签:

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.charset = 'utf-8';
script.defer = true;
script.async = true;
script.text = 'some my javascript content here';
head.appendChild(script);

script.onload = function () {
    // this never get fired..
    debugger;
}

当脚本在其他代码块中执行时如何得到通知?也许是一些事件?

最佳答案

我能够通过向脚本添加一个 ID,然后在 JS 中手动触发该 DOM 元素上的加载事件来实现这一点。仅在 Chrome 中测试,根据 MDN 在旧版 IE 中会出现问题).

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.charset = 'utf-8';
script.id = 'testing';
script.defer = true;
script.async = true;
script.onload = function () {
    console.log('The script is loaded');
}
script.text = ["console.log('This is from the script');",
               "var script = document.getElementById('testing');",
               "var event = new UIEvent('load');",
               "script.dispatchEvent(event);"].join('');
head.appendChild(script);

Fiddle

关于javascript - 如何知道动态创建的脚本标签被执行了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25688786/

有关javascript - 如何知道动态创建的脚本标签被执行了?的更多相关文章

  1. javascript - 无法使用 webpack 缩小 css 代码 - 2

    网络包版本:4.16.3全部编译成功。我在bundle.css中编译后的代码不是minify。我尝试在text-webpack-plugin中使用minimize:true,但它不起作用。对于编译,我在命令行中使用命令:webpack在我的工作目录中我做错了什么?我的wepback配置:'usestrict'constwebpack=require("webpack");constExtractTextPlugin=require('extract-text-webpack-plugin')module.exports={context:

  2. javascript - TSLint,强制导入语句中括号之间的间距 - 2

    我需要应用哪个规则来强制导入语句中大括号之间的空格?即代替:import{IPostService}from'./api/IPostService';我要:import{IPostService}from'./api/IPostService'; 最佳答案 我认为这可能是您正在寻找的:"whitespace":[true,"check-module"]check-module-检查导入和导出语句中的空格。 关于javascr

  3. javascript - 学习 JavaScript : display all firstnames with B as first letter - 2

    我是第一次学习JavaScript,我想知道为什么我的代码不起作用。我有Python/Django知识。目标:我必须创建一个姓名列表,并且我必须只显示以“B”字母开头的名字。我的脚本:varlistNames=['Paul','Bruno','Arthur','Bert','José']for(variinlistNames){if(i.substr(0,1)==='B'){console.log(i);}}但是这段代码没有显示任何东西。 最佳答案

  4. javascript - 使用 TypeScript 强制 React 组件命名 - 2

    有React+TypeScript的应用,所有的组件类都要大写,有Component后缀,例如:exportclassFooBarComponentextendsReact.Component{...}应用程序被弹出create-react-application应用程序,即使用Webpack构建。如何强制组件命名与样式指南保持一致,至少对于组件类而言,当存在不一致时会在构建时抛出错误?我相信这不能单独使用TSLint/ESLint来实现。如果应该对TypeScript和JavaScript使用不同的方法,那么针对这两种语言的解决方案会很有帮助。 最佳答案

  5. javascript - 理解嵌套箭头函数 ES6 - 2

    这个问题在这里已经有了答案:WhatdomultiplearrowfunctionsmeaninJavaScript?(7个答案)关闭4年前。constlogger=store=>next=>action=>{letresultconsole.groupCollapsed("dispatching",action.type)console.log('prevstate',store.getState())console.log('action',action)result=next(action)console.log(

  6. javascript - vuejs 复制数据对象并删除属性也会从原始对象中删除该属性 - 2

    我在vue中有一个数据对象,看起来像这样rows[0{title:"mytitle",post:"myposttext",public:false,info:"someinfo"},1{title:"mytitle",post:"myposttext"public:true,info:"someinfo"},2{title:"mytitle",post:"myposttext"public:false,info:"someinfo"}]然后我复

  7. javascript - 在 Parceljs 中暴露环境? - 2

    我试图在使用Parcel.js构建时公开一个变量,类似于WebpackDefinePlugin但我还没有找到如何去做。在开发中,我希望我的API主机与我的生产主机不同,因此://development:API_URL="http://localhost:8900/"//production:API_URL="/"目前Parcel支持module.hot开关,我可能会滥用它,因为热模块重新加载只在开发中启用,但最好有更好的方法。我还可以检查window.location.hostname是否为localhost,但这是一种解决方法。

  8. javascript - 如何在 JavaScript 中将驼峰式字符串转换为破折号? - 2

    我想转换这些字符串:fooBarFooBar进入:foo-bar-foo-bar对于任何给定的字符串,我如何在JavaScript中以最优雅和最高效的方式做到这一点? 最佳答案 您可以将replace与正则表达式一起使用,例如:letdashed=camel.replace(/[A-Z]/g,m=>"-"+m.toLowerCase());匹配所有大写字母并将它们替换为前面带有"-"的小写字母。示例:console.log("fooBar".replace(/[A-Z]/g,m=>"

  9. javascript - React,如何从 parent 那里访问 child 的状态?无需更新 parent 的状态 - 2

    你好,我是React的新手,我很难全神贯注于整个状态管理以及通过状态和Prop传递数据。我确实理解标准的react方式是以单向方式传递数据-从parent到child,我已经为所有其他组件这样做了。但是我有一个名为Book的组件,它会根据用户选择表单“阅读、想要阅读、当前正在阅读和无”来更改其“书架”状态。在呈现Book组件的BookList组件中,它需要能够读取Book的书架状态并在名为“read、wantToRead、currentlyReading和none”的部分下呈现正确的书籍。由于在这种情况下,Book组件是从BookList组件呈现的,而BookList是父组件,我真的不

  10. javascript - 使用 capybara 捕获浏览器控制台日志 - 2

    我需要使用Ruby和Capybara捕获浏览器的控制台日志(类别:信息)。到目前为止,我已经尝试使用driver.manage.logs.get(:browser)或(:client)但是,使用它,结果不是我想要的。它给出了selenium和浏览器之间的交互结果,我可以在其中看到我的javascript语句已发送执行,但结果输出无法被捕获。 最佳答案 使用selenium时日志是否可用取决于您使用Selenium的浏览器。如果您使用的是Firefox,那您就不走运了,因为它不支持日志检索API,但是由于您使用的是Chrome,因此可

随机推荐

  1. javascript - 无法使用 webpack 缩小 css 代码 - 2

    网络包版本:4.16.3全部编译成功。我在bundle.css中编译后的代码不是minify。我尝试在text-webpack-plugin中使用minimize:true,但它不起作用。对于编译,我在命令行中使用命令:webpack在我的工作目录中我做错了什么?我的wepback配置:'usestrict'constwebpack=require("webpack");constExtractTextPlugin=require('extract-text-webpack-plugin')module.exports={context:

  2. javascript - TSLint,强制导入语句中括号之间的间距 - 2

    我需要应用哪个规则来强制导入语句中大括号之间的空格?即代替:import{IPostService}from'./api/IPostService';我要:import{IPostService}from'./api/IPostService'; 最佳答案 我认为这可能是您正在寻找的:"whitespace":[true,"check-module"]check-module-检查导入和导出语句中的空格。 关于javascr

  3. javascript - 学习 JavaScript : display all firstnames with B as first letter - 2

    我是第一次学习JavaScript,我想知道为什么我的代码不起作用。我有Python/Django知识。目标:我必须创建一个姓名列表,并且我必须只显示以“B”字母开头的名字。我的脚本:varlistNames=['Paul','Bruno','Arthur','Bert','José']for(variinlistNames){if(i.substr(0,1)==='B'){console.log(i);}}但是这段代码没有显示任何东西。 最佳答案

  4. javascript - 使用 TypeScript 强制 React 组件命名 - 2

    有React+TypeScript的应用,所有的组件类都要大写,有Component后缀,例如:exportclassFooBarComponentextendsReact.Component{...}应用程序被弹出create-react-application应用程序,即使用Webpack构建。如何强制组件命名与样式指南保持一致,至少对于组件类而言,当存在不一致时会在构建时抛出错误?我相信这不能单独使用TSLint/ESLint来实现。如果应该对TypeScript和JavaScript使用不同的方法,那么针对这两种语言的解决方案会很有帮助。 最佳答案

  5. javascript - 理解嵌套箭头函数 ES6 - 2

    这个问题在这里已经有了答案:WhatdomultiplearrowfunctionsmeaninJavaScript?(7个答案)关闭4年前。constlogger=store=>next=>action=>{letresultconsole.groupCollapsed("dispatching",action.type)console.log('prevstate',store.getState())console.log('action',action)result=next(action)console.log(

  6. javascript - vuejs 复制数据对象并删除属性也会从原始对象中删除该属性 - 2

    我在vue中有一个数据对象,看起来像这样rows[0{title:"mytitle",post:"myposttext",public:false,info:"someinfo"},1{title:"mytitle",post:"myposttext"public:true,info:"someinfo"},2{title:"mytitle",post:"myposttext"public:false,info:"someinfo"}]然后我复

  7. javascript - 在 Parceljs 中暴露环境? - 2

    我试图在使用Parcel.js构建时公开一个变量,类似于WebpackDefinePlugin但我还没有找到如何去做。在开发中,我希望我的API主机与我的生产主机不同,因此://development:API_URL="http://localhost:8900/"//production:API_URL="/"目前Parcel支持module.hot开关,我可能会滥用它,因为热模块重新加载只在开发中启用,但最好有更好的方法。我还可以检查window.location.hostname是否为localhost,但这是一种解决方法。

  8. javascript - 如何在 JavaScript 中将驼峰式字符串转换为破折号? - 2

    我想转换这些字符串:fooBarFooBar进入:foo-bar-foo-bar对于任何给定的字符串,我如何在JavaScript中以最优雅和最高效的方式做到这一点? 最佳答案 您可以将replace与正则表达式一起使用,例如:letdashed=camel.replace(/[A-Z]/g,m=>"-"+m.toLowerCase());匹配所有大写字母并将它们替换为前面带有"-"的小写字母。示例:console.log("fooBar".replace(/[A-Z]/g,m=>"

  9. javascript - React,如何从 parent 那里访问 child 的状态?无需更新 parent 的状态 - 2

    你好,我是React的新手,我很难全神贯注于整个状态管理以及通过状态和Prop传递数据。我确实理解标准的react方式是以单向方式传递数据-从parent到child,我已经为所有其他组件这样做了。但是我有一个名为Book的组件,它会根据用户选择表单“阅读、想要阅读、当前正在阅读和无”来更改其“书架”状态。在呈现Book组件的BookList组件中,它需要能够读取Book的书架状态并在名为“read、wantToRead、currentlyReading和none”的部分下呈现正确的书籍。由于在这种情况下,Book组件是从BookList组件呈现的,而BookList是父组件,我真的不

  10. javascript - 使用 capybara 捕获浏览器控制台日志 - 2

    我需要使用Ruby和Capybara捕获浏览器的控制台日志(类别:信息)。到目前为止,我已经尝试使用driver.manage.logs.get(:browser)或(:client)但是,使用它,结果不是我想要的。它给出了selenium和浏览器之间的交互结果,我可以在其中看到我的javascript语句已发送执行,但结果输出无法被捕获。 最佳答案 使用selenium时日志是否可用取决于您使用Selenium的浏览器。如果您使用的是Firefox,那您就不走运了,因为它不支持日志检索API,但是由于您使用的是Chrome,因此可