js实用方法记录-动态加载css/js

简介: 动态加载js文件到head标签并执行回调

1. 动态加载js文件到head标签并执行回调



方法调用:dynamicLoadJs('http://www.yimo.link/static/js/main.min.js', function () { alert('加载成功') });


/**
 * 动态加载JS
 * @param {string} url 脚本地址
 * @param {function} callback  回调函数
 */
function dynamicLoadJs(url, callback) {
    var head = document.getElementsByTagName('head')[0];
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = url;
    if (typeof (callback) == 'function') {
        script.onload = script.onreadystatechange = function () {
            if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
                callback();
                script.onload = script.onreadystatechange = null;
            }
        };
    }
    head.appendChild(script);
}


2. 动态加载css文件到head



方法调用: dynamicLoadCss('http://www.yimo.link/static/css/style.css')

/**
 * 动态加载CSS
 * @param {string} url 样式地址
 */
function dynamicLoadCss(url) {
    var head = document.getElementsByTagName('head')[0];
    var link = document.createElement('link');
    link.type = 'text/css';
    link.rel = 'stylesheet';
    link.href = url;
    head.appendChild(link);
}


3. 动态加载脚本文件



参考:http://www.cnblogs.com/yuanke/p/5039699.html


/**
 * 动态加载css脚本
 * @param {string} cssText css样式
 */
function loadStyleString(cssText) {
    var style = document.createElement("style");
    style.type = "text/css";
    try {
        // firefox、safari、chrome和Opera
        style.appendChild(document.createTextNode(cssText));
    } catch (ex) {
        // IE早期的浏览器 ,需要使用style元素的stylesheet属性的cssText属性
        style.styleSheet.cssText = cssText;
    }
    document.getElementsByTagName("head")[0].appendChild(style);
}
// 测试
var css = "body{color:blue;}";
loadStyleString(css);
/**
 * 动态加载js脚本
 * @param {string} code js脚本
 */
function loadScriptString(code) {
    var script = document.createElement("script");
    script.type = "text/javascript";
    try {
        // firefox、safari、chrome和Opera
        script.appendChild(document.createTextNode(code));
    } catch (ex) {
        // IE早期的浏览器 ,需要使用script的text属性来指定javascript代码。
        script.text = code;
    }
    document.getElementsByTagName("head")[0].appendChild(script);
}
// 测试
var text = "function test(){alert('test');}";
loadScriptString(text);
test();


4. 动态加载iframe到body标签并执行回调



方法调用:dynamicLoadIframe('http://www.yimo.link', function () { alert('加载成功') }, '');


/**
 * 动态加载Iframe
 * @param {string} url 脚本地址
 * @param {function} callback  回调函数
 * @param {string} style  加载样式
 */
function dynamicLoadIframe(url, callback, style) {
    var body = document.getElementsByTagName('body')[0];
    var iframe = document.createElement('iframe');
    iframe.src = url;
    iframe.style = style || 'display:none;width:0px;height:0px;';
    if (typeof (callback) == 'function') {
        iframe.onload = iframe.onreadystatechange = function () {
            if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
                callback();
                iframe.onload = iframe.onreadystatechange = null;
            }
        };
    }
    body.appendChild(iframe);
}


5. M站中下载 / 打开app



方法测试:openApp('ios页面', '**.apk', 'metools://home');


function openApp(iosDownUrl, andDownUrl, appUrl) {
    var ua = navigator.userAgent.toLowerCase();
    if (/iphone|ipad|ipod/.test(ua)) {//ios跳转到store
        window.location.href = iosDownUrl;
        return;
    }
    if (ua.indexOf("micromessenger") > -1) {//微信中不能打开其他app
        window.location.href = andDownUrl;
        return;
    }
    if (/android/.test(ua)) {//安卓手机尝试调用app
        if (!appUrl) {
            console.log('未指定需要打开的App,可参考http://www.oschina.net/code/snippet_256033_35330/');
            return;
        }
        var su = appUrl;//"metools://index";//自定义协议
        var n = setTimeout(function () {
            window.location.href = andDownUrl
        }, 500);
        var r = document.createElement("iframe");
        r.src = su;
        r.onload = function () {
            console.log('iframe load')
            clearTimeout(n);
            r.parentNode.removeChild(r);
            window.location.href = su;
        };
        r.setAttribute("style", "display:none;");
        document.body.appendChild(r);
        return;
    }
    window.location.href = andDownUrl;
}
相关文章
|
7月前
|
监控 负载均衡 JavaScript
有哪些有效的方法可以优化Node.js应用的性能?
有哪些有效的方法可以优化Node.js应用的性能?
377 69
|
6月前
|
移动开发 前端开发 JavaScript
征信报告修改器,征信报告生成器,制作软件无痕修改软件【js+html+css】
本项目为信用评分模拟器教学工具,采用HTML5实现,仅供学习参考。核心功能通过JavaScript构建,包含虚拟数据生成、权重分配及信用因素分析(如还款记录、信用使用率等)。
|
6月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
|
6月前
|
前端开发 JavaScript
个人征信电子版无痕修改, 个人信用报告pdf修改,js+html+css即可实现【仅供学习用途】
本代码展示了一个信用知识学习系统的前端实现,包含评分计算、因素分析和建议生成功能。所有数据均为模拟生成
|
6月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法详解
本指南详细介绍在Linux系统中安装和管理Node.js的步骤。首先检查现有环境,包括查看当前版本和清除旧版本;接着通过NodeSource仓库安装最新版Node.js并验证安装结果。推荐使用nvm(Node Version Manager)进行多版本管理,便于切换和设置默认版本。同时,提供常见问题解决方法,如权限错误处理和全局模块迁移方案,以及版本回滚操作,确保用户能够灵活应对不同需求。
539 0
|
6月前
|
JavaScript Linux 内存技术
Debian 11系统下Node.js版本更新方法
Debian 11更新Node.js主要就是这三种方式,无论你是初涉其中的新手还是找寻挑战的专家,总有一种方式能满足你的需求。现在,你已经是这个
655 80
|
6月前
|
存储 前端开发 安全
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
|
6月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
6月前
|
前端开发 容器
处方单图片生成器, 处方单在线制作免费,js+css+html恶搞神器
这是一个电子处方模拟生成系统,使用html2canvas库实现图片导出功能。系统生成的处方单包含多重防伪标识,并明确标注为模拟数据,仅供学习