js实用方法记录-js动态加载css、js脚本文件

时间:2022-10-25 20:16:18

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

附送一个加载iframe,h5打开app代码

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;
}

query参数转换

参考:https://github.com/nicejade/awesome-vue-cli3-example/blob/master/src/helper/utils.js#L36

query参数转对象

export function query(search) {
let str = search || window.location.search
let objURL = {} str.replace(new RegExp('([^?=&]+)(=([^&]*))?', 'g'), ($0, $1, $2, $3) => {
objURL[$1] = $3
})
return objURL
}

使用:query('?v=1')

对象转query参数

function queryString(url, query) {
let str = []
for (let key in query) {
str.push(key + '=' + query[key])
}
let paramStr = str.join('&')
return paramStr ? `${url}?${paramStr}` : url
}

使用: queryString('http://192.168.1.32:3638/checkout',{abc:123})

js实用方法记录-js动态加载css、js脚本文件的更多相关文章

  1. 文字添加响应事件,js动态加载CSS, js弹出DIV

    文字添加响应事件,js动态加载CSS, js弹出DIV <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

  2. 动态加载css&comma;js

    function dynamicLoadCss(url) { var head = document.getElementsByTagName('head')[0]; var link = docum ...

  3. 用JavaScript动态加载CSS和JS文件

    本文转载自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/11/14/2248451.html 今天项目中需要用到动态加载 CSS 文件 ...

  4. jQuery中的ready方法及实现按需加载css&comma;js

    模拟jQuery中的ready方法及实现按需加载css,js 一.ready函数的实现 经常用jQuery类库或其他类库中的ready方法,有时候想想它们到底是怎么实现的,但是看了一下jQuery中的 ...

  5. js实用方法记录-简单cookie操作

    js实用方法记录-简单cookie操作 设置cookie:setCookie(名称,值,保存时间,保存域); 获取cookie:setCookie(名称); 移除cookie:setCookie(名称 ...

  6. js实用方法记录-指不定哪天就会用到的js方法

    js实用方法记录-指不定哪天就会用到的js方法 常用或者不常用都有 判断是否在微信浏览器中 测试代码:isWeiXin()==false /** * 是否在微信中 */ function isWeix ...

  7. JavaScript动态加载CSS和JS文件

    var dynamicLoading = { css: function(path){ if(!path || path.length === 0){ throw new Error('argumen ...

  8. 模拟jQuery中的ready方法及实现按需加载css&comma;js实例代码

    这篇文章介绍了模拟jQuery中的ready方法及实现按需加载css,js实例代码,有需要的朋友可以参考一下     一.ready函数的实现经常用jQuery类库或其他类库中的ready方法,有时候 ...

  9. 动态加载CSS,JS文件

    var Head = document.getElementsByTagName('head')[0],style = document.createElement('style'); //文件全部加 ...

随机推荐

  1. sql server 2008 R2配置管理

    安装vs2013后,sql server 2008R2配置管理提示“远程过程调用失败” 这是因为vs2013自带的Microsoft SQL Server 2012Local DB与之冲突. 通过升级 ...

  2. 北京联想招聘-Android Framework高级工程师(7-10年) 加入qq 群:220486180 或者直接在此 留言咨询

    Job ID #: 45038 Position Title: Android Framework高级工程师 Location: CHN-Beijing Functional Area: Resear ...

  3. c&num; 任意多个数,求最大值

    c#  任意多个数,求最大值 使用parms: 正在研究中,如果有好的方案,可评论,共同进步,共同提高,谢谢!

  4. Oracle- 表的自增长创建

    Oracle创建自增长要先写序列还要去写触发器,不像MSSQLSERVER那样方便.但也是麻烦,记录如下: Oracle中,可以为每张表的主键创建一个单独的序列,然后从这个序列中获取自动增加的标识符, ...

  5. 如何判断是REQUEST请求是来自移动终端还是来自PC端

    public bool IsMoblie()        {            string agent = (Request.UserAgent + "").ToLower ...

  6. Oracle EBS-SQL &lpar;WIP-15&rpar;&colon;检查车间任务物料未发数量与现有量对照&period;sql

    select we.wip_entity_name                          任务号      ,mfg_lookups_wjs.meaning               作 ...

  7. ORA-12514(TNS&colon;监听程序当前无法识别&period;&period;&period;&rpar;

    记录: ORA-12514(TNS:监听程序当前无法识别...)的解决方案 在安装ORACLE 11G 过程中由于配置的原因,安装过程中报了如下错误:   按照安装提示执行后面的操作后,打开PL/SQ ...

  8. 实验吧web题:

    实验吧web题: 这个有点简单 因为刚了解sqlmap,所以就拿sqlmap来练练手了 1,先测试该页面是否存在sql注入漏洞 2.找到漏洞页面,复制url,然后打开sqlmap 先查看当前数据库 然 ...

  9. ios 审核未通过 相机相册权限问题

    苹果提交审核被打回来  附加的说明如下: We noticed that your app requests the user’s consent to access their camera but ...

  10. Docker worker nodes shown as &OpenCurlyDoubleQuote;Down” after re-start

    After docker is shutdown, the worker node  changes its status to Down, but availability remains at A ...