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

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

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;
}
相关文章
|
6天前
|
前端开发 JavaScript
前端 js 经典:数组常用方法总结
前端 js 经典:数组常用方法总结
15 0
|
5天前
|
缓存 移动开发 JavaScript
WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存
WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存
16 1
|
5天前
|
移动开发 JavaScript iOS开发
WKWebView和js互调方法的实现
WKWebView和js互调方法的实现
9 0
|
5天前
|
JavaScript 前端开发
Symbol在JavaScript中还有哪些内置的Symbol可以用于定义特定的方法或属性
Symbol在JavaScript中还有哪些内置的Symbol可以用于定义特定的方法或属性
|
6天前
|
前端开发 JavaScript
前端 JS 经典:数组去重万能方法
前端 JS 经典:数组去重万能方法
10 0
|
6天前
|
前端开发 JavaScript 流计算
前端 js 经典:字符串超全方法总结
前端 js 经典:字符串超全方法总结
15 0
|
7天前
|
前端开发 JavaScript 开发者
JavaScript中的异步编程方法总结
在JavaScript开发中,处理异步操作是非常常见的情况。本文将总结JavaScript中常用的异步编程方法,包括Callback、Promise、Async/Await等,分析其优缺点,并提供使用建议。
|
9天前
|
缓存 前端开发 JavaScript
React和Next.js开发常见的HTTP请求方法
React和Next.js开发常见的HTTP请求方法
13 0
|
9天前
|
前端开发 JavaScript
前端 JS 经典:Math 常用方法汇总
前端 JS 经典:Math 常用方法汇总
14 0
|
9天前
|
前端开发 JavaScript
前端 js 经典:Object 常用原生方法
前端 js 经典:Object 常用原生方法
15 2