HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

app进入后台,多任务管理器,界面变毛玻璃高斯模糊、透明效果

app进入后台毛玻璃高斯模糊效果(ios):https://ext.dcloud.net.cn/plugin?id=2373
app进入后台透明效果、应用内禁止截屏(andorid):https://ext.dcloud.net.cn/plugin?id=2379

继续阅读 »

app进入后台毛玻璃高斯模糊效果(ios):https://ext.dcloud.net.cn/plugin?id=2373
app进入后台透明效果、应用内禁止截屏(andorid):https://ext.dcloud.net.cn/plugin?id=2379

收起阅读 »

苹果上架好难呀 准则4.3 -设计 请问下 这么修改

准则4.3 -设计

我们注意到您的app提供的功能设置与提交到app Store的其他app相同;它只是在内容或语言上有所不同,这被认为是垃圾邮件的一种形式。

准则4.3 -设计

我们注意到您的app提供的功能设置与提交到app Store的其他app相同;它只是在内容或语言上有所不同,这被认为是垃圾邮件的一种形式。

android自动截图,并利用插件canvas生成可自定义的图片分享到微信(5+接口因为map地图和echarts截图后会出现黑色部分)

第一步:自动截图
使用的插件市场的大佬:https://ext.dcloud.net.cn/plugin?id=1886
// 转码
getBase64ByUri(screenrShotUri) {
console.log("654321");
return new Promise((resolve, reject) => {
try {
console.log("123456");
plus.io.resolveLocalFileSystemURL(
screenrShotUri,
function(entry) {
// 可通过entry对象操作test.html文件
// console.log("可通过entry对象操作test.html文件");
entry.file(function(file) {
var fileReader = new plus.io.FileReader();
// console.log("getFile:" + JSON.stringify(file));

                            fileReader.onloadend = function(evt) {  
                                // console.log(evt.target.result)  
                                resolve(evt.target.result);  
                            };  
                            // fileReader.readAsText(file, 'utf-8');  
                            fileReader.readAsDataURL(file);  
                        });  
                    },  
                    function(e) {  
                        console.log('Resolve file URL failed: ', e);  
                        uni.showToast({  
                            title: '图片读取失败',  
                            icon: 'none'  
                        });  
                        reject();  
                    }  
                );  
            } catch (e) {  
                uni.showToast({  
                    title: '图片读取失败',  
                    icon: 'none'  
                });  
                reject();  
            }  
        });  
    },  
    // 分享  
    shareTraing() {  
        const ssTest = uni.requireNativePlugin('hsj-screenshothsj');  
        ssTest.handle2ScreenShotNotDialogFuncV2({ msg: 'handle2ScreenShotNotDialogFuncV2 ...' }, result => {  
            switch (result.type) {  
                case 0:  
                    this.backText.push(result.data.toString());  
                    break;  
                case 1:  
                    //显示图片  
                    this.src = result.data.toString();  
                    console.log(this.src);  
                    this.getBase64ByUri(this.src).then(res => {  
                        // console.log(res)  
                        this.src = res;  
                        // this.istestshow = true  
                        this.shareFc();  
                    });  
                    this.backText.push('-图片地址路径:' + result.data.toString());  

                    break;  
                default:  
                    console.log('no have type');  
            }  
        });  

另附上5+的方法:
/ let pages = getCurrentPages();
let page = pages[pages.length - 1];
// #ifdef APP-PLUS
let ws = page.$getAppWebview();
// #endif
// ws.append(this.mapCtx);
let bitmap = new plus.nativeObj.Bitmap('drawScreen');
// 将webview内容绘制到Bitmap对象中
ws.draw(bitmap, () => {
// 保存图片到本地
bitmap.save("_doc/"+new Date().getTime()+".jpg", {
overwrite: true
}, res => {
console.log(res.target); // 图片地址
}, error => {
console.log(JSON.stringify(error)); // 保存失败信息
});
bitmap.clear(); // 清除Bitmap对象
}, error => {
console.log(JSON.stringify(error)); // 绘制失败
}, {
check: true, // 设置为检测白屏
});
/

第二步:将截图自定义成想要的图片
插件大佬:https://ext.dcloud.net.cn/plugin?id=471#custom
// 画布
async shareFc() {
try {
_app.log('准备生成:' + new Date())
const d = await getSharePoster({
_this: this, //若在组件中使用 必传
type: 'testShareType',
formData: {
//访问接口获取背景图携带自定义数据

                },  
                posterCanvasId: this.canvasId,  //canvasId  
                delayTimeScale: 20, //延时系数  
                backgroundImage: this.src,  
                drawArray: ({  
                    bgObj,  
                    type,  
                    bgScale  
                }) => {  
                    const dx = bgObj.width * 0.3;  
                    const fontSize = bgObj.width * 0.045;  
                    const lineHeight = bgObj.height * 0.06;  
                    //可直接return数组,也可以return一个promise对象, 但最终resolve一个数组, 这样就可以方便实现后台可控绘制海报  
                    return new Promise((rs, rj) => {  
                        rs([{  
                                type: 'custom',  
                                setDraw(Context) {  
                                    Context.setFillStyle('black');  
                                    Context.setGlobalAlpha(0.7);  
                                    Context.fillRect(0, bgObj.height - bgObj.height * 0.13, bgObj.width, bgObj.height * 0.13);  
                                    Context.setGlobalAlpha(1);  
                                }  
                            },  
                            {  
                                type: 'image',  
                                url: 'http://哈哈哈哈.png', // 图标或者用户头像  
                                alpha: 1,  
                                dx,  
                                dy: bgObj.height - bgObj.width * 0.25,  
                                infoCallBack(imageInfo) {  
                                    let scale = bgObj.width * 0.2 / imageInfo.height;  
                                    return {  
                                        circleSet: {  
                                            x: imageInfo.width * scale / 2,  
                                            y: bgObj.width * 0.2 / 2,  
                                            r: bgObj.width * 0.2 / 2  
                                        }, // 圆形图片 , 若circleSet与roundRectSet一同设置 优先circleSet设置  
                                        dWidth: imageInfo.width * scale, // 因为设置了圆形图片 所以要乘以2  
                                        dHeight: bgObj.width * 0.2,  
                                        /* roundRectSet: { // 圆角矩形  
                                            r: imageInfo.width * .1  
                                        } */  
                                    }  
                                }  
                            },  
                            {  
                                type: 'text',  
                                text: 'app 名称或者其他想要展示的文字',  
                                fontWeight: 'bold',  
                                size: fontSize,  
                                color: 'white',  
                                alpha: 1,  
                                textAlign: 'left',  
                                textBaseline: 'middle',  
                                serialNum: 1,  
                                infoCallBack(textLength) {  
                                    return {  
                                        dx: bgObj.width - textLength - fontSize,  
                                        dy: bgObj.height - lineHeight + 20  
                                    }  
                                }  
                            },  
                            {  
                                type: 'qrcode',  
                                text: 'http:/我的 app下载连接aab0e4d9ebd89d.apk', // 这里是可以将连接或者文件,生成二维码。  
                                size: bgObj.width * 0.2,  
                                dx: bgObj.width*0.05,  
                                dy: bgObj.height - bgObj.width*0.25  
                            }  
                        ]);  
                    })  
                },  
                setCanvasWH: ({  
                    bgObj,  
                    type,  
                    bgScale  
                }) => { // 为动态设置画布宽高的方法,  
                    this.poster = bgObj;  
                }  
            });  
            _app.log('海报生成成功, 时间:' + new Date() + ', 临时路径: ' + d.poster.tempFilePath)  
            this.poster.finalPath = d.poster.tempFilePath;  
            this.qrShow = true;  
        } catch (e) {  
            _app.hideLoading();  
            _app.showToast(JSON.stringify(e));  
            console.log(JSON.stringify(e));  
        }  
    },  
    saveImage() {  
        // #ifndef H5  
        uni.saveImageToPhotosAlbum({  
            filePath: this.poster.finalPath,  
            success(res) {  
                _app.showToast('保存成功');  
            }  
        })  
        // #endif  
        // #ifdef H5  
        _app.showToast('保存了');  
        // #endif  
    },  
    share() {  
        // #ifdef APP-PLUS  
        _app.getShare(false, false, 2, '', '', '', this.poster.finalPath, false, false);  
        // #endif  

        // #ifndef APP-PLUS  
        _app.showToast('分享成功');  
        // #endif  
    },  
继续阅读 »

第一步:自动截图
使用的插件市场的大佬:https://ext.dcloud.net.cn/plugin?id=1886
// 转码
getBase64ByUri(screenrShotUri) {
console.log("654321");
return new Promise((resolve, reject) => {
try {
console.log("123456");
plus.io.resolveLocalFileSystemURL(
screenrShotUri,
function(entry) {
// 可通过entry对象操作test.html文件
// console.log("可通过entry对象操作test.html文件");
entry.file(function(file) {
var fileReader = new plus.io.FileReader();
// console.log("getFile:" + JSON.stringify(file));

                            fileReader.onloadend = function(evt) {  
                                // console.log(evt.target.result)  
                                resolve(evt.target.result);  
                            };  
                            // fileReader.readAsText(file, 'utf-8');  
                            fileReader.readAsDataURL(file);  
                        });  
                    },  
                    function(e) {  
                        console.log('Resolve file URL failed: ', e);  
                        uni.showToast({  
                            title: '图片读取失败',  
                            icon: 'none'  
                        });  
                        reject();  
                    }  
                );  
            } catch (e) {  
                uni.showToast({  
                    title: '图片读取失败',  
                    icon: 'none'  
                });  
                reject();  
            }  
        });  
    },  
    // 分享  
    shareTraing() {  
        const ssTest = uni.requireNativePlugin('hsj-screenshothsj');  
        ssTest.handle2ScreenShotNotDialogFuncV2({ msg: 'handle2ScreenShotNotDialogFuncV2 ...' }, result => {  
            switch (result.type) {  
                case 0:  
                    this.backText.push(result.data.toString());  
                    break;  
                case 1:  
                    //显示图片  
                    this.src = result.data.toString();  
                    console.log(this.src);  
                    this.getBase64ByUri(this.src).then(res => {  
                        // console.log(res)  
                        this.src = res;  
                        // this.istestshow = true  
                        this.shareFc();  
                    });  
                    this.backText.push('-图片地址路径:' + result.data.toString());  

                    break;  
                default:  
                    console.log('no have type');  
            }  
        });  

另附上5+的方法:
/ let pages = getCurrentPages();
let page = pages[pages.length - 1];
// #ifdef APP-PLUS
let ws = page.$getAppWebview();
// #endif
// ws.append(this.mapCtx);
let bitmap = new plus.nativeObj.Bitmap('drawScreen');
// 将webview内容绘制到Bitmap对象中
ws.draw(bitmap, () => {
// 保存图片到本地
bitmap.save("_doc/"+new Date().getTime()+".jpg", {
overwrite: true
}, res => {
console.log(res.target); // 图片地址
}, error => {
console.log(JSON.stringify(error)); // 保存失败信息
});
bitmap.clear(); // 清除Bitmap对象
}, error => {
console.log(JSON.stringify(error)); // 绘制失败
}, {
check: true, // 设置为检测白屏
});
/

第二步:将截图自定义成想要的图片
插件大佬:https://ext.dcloud.net.cn/plugin?id=471#custom
// 画布
async shareFc() {
try {
_app.log('准备生成:' + new Date())
const d = await getSharePoster({
_this: this, //若在组件中使用 必传
type: 'testShareType',
formData: {
//访问接口获取背景图携带自定义数据

                },  
                posterCanvasId: this.canvasId,  //canvasId  
                delayTimeScale: 20, //延时系数  
                backgroundImage: this.src,  
                drawArray: ({  
                    bgObj,  
                    type,  
                    bgScale  
                }) => {  
                    const dx = bgObj.width * 0.3;  
                    const fontSize = bgObj.width * 0.045;  
                    const lineHeight = bgObj.height * 0.06;  
                    //可直接return数组,也可以return一个promise对象, 但最终resolve一个数组, 这样就可以方便实现后台可控绘制海报  
                    return new Promise((rs, rj) => {  
                        rs([{  
                                type: 'custom',  
                                setDraw(Context) {  
                                    Context.setFillStyle('black');  
                                    Context.setGlobalAlpha(0.7);  
                                    Context.fillRect(0, bgObj.height - bgObj.height * 0.13, bgObj.width, bgObj.height * 0.13);  
                                    Context.setGlobalAlpha(1);  
                                }  
                            },  
                            {  
                                type: 'image',  
                                url: 'http://哈哈哈哈.png', // 图标或者用户头像  
                                alpha: 1,  
                                dx,  
                                dy: bgObj.height - bgObj.width * 0.25,  
                                infoCallBack(imageInfo) {  
                                    let scale = bgObj.width * 0.2 / imageInfo.height;  
                                    return {  
                                        circleSet: {  
                                            x: imageInfo.width * scale / 2,  
                                            y: bgObj.width * 0.2 / 2,  
                                            r: bgObj.width * 0.2 / 2  
                                        }, // 圆形图片 , 若circleSet与roundRectSet一同设置 优先circleSet设置  
                                        dWidth: imageInfo.width * scale, // 因为设置了圆形图片 所以要乘以2  
                                        dHeight: bgObj.width * 0.2,  
                                        /* roundRectSet: { // 圆角矩形  
                                            r: imageInfo.width * .1  
                                        } */  
                                    }  
                                }  
                            },  
                            {  
                                type: 'text',  
                                text: 'app 名称或者其他想要展示的文字',  
                                fontWeight: 'bold',  
                                size: fontSize,  
                                color: 'white',  
                                alpha: 1,  
                                textAlign: 'left',  
                                textBaseline: 'middle',  
                                serialNum: 1,  
                                infoCallBack(textLength) {  
                                    return {  
                                        dx: bgObj.width - textLength - fontSize,  
                                        dy: bgObj.height - lineHeight + 20  
                                    }  
                                }  
                            },  
                            {  
                                type: 'qrcode',  
                                text: 'http:/我的 app下载连接aab0e4d9ebd89d.apk', // 这里是可以将连接或者文件,生成二维码。  
                                size: bgObj.width * 0.2,  
                                dx: bgObj.width*0.05,  
                                dy: bgObj.height - bgObj.width*0.25  
                            }  
                        ]);  
                    })  
                },  
                setCanvasWH: ({  
                    bgObj,  
                    type,  
                    bgScale  
                }) => { // 为动态设置画布宽高的方法,  
                    this.poster = bgObj;  
                }  
            });  
            _app.log('海报生成成功, 时间:' + new Date() + ', 临时路径: ' + d.poster.tempFilePath)  
            this.poster.finalPath = d.poster.tempFilePath;  
            this.qrShow = true;  
        } catch (e) {  
            _app.hideLoading();  
            _app.showToast(JSON.stringify(e));  
            console.log(JSON.stringify(e));  
        }  
    },  
    saveImage() {  
        // #ifndef H5  
        uni.saveImageToPhotosAlbum({  
            filePath: this.poster.finalPath,  
            success(res) {  
                _app.showToast('保存成功');  
            }  
        })  
        // #endif  
        // #ifdef H5  
        _app.showToast('保存了');  
        // #endif  
    },  
    share() {  
        // #ifdef APP-PLUS  
        _app.getShare(false, false, 2, '', '', '', this.poster.finalPath, false, false);  
        // #endif  

        // #ifndef APP-PLUS  
        _app.showToast('分享成功');  
        // #endif  
    },  
收起阅读 »

composition-api 在 uni-app 微信小程序中的使用

微信小程序

一开始我按照 composition-api 官方文档 中所说的引入 import VueCompositionAPI from "@vue/composition-api"; 然后使用 Vue.use(VueCompositionAPI); 在开发模式下一切完美。

但编译之后就不行了,在网上找到了 https://github.com/dcloudio/uni-app/issues/1839 ,里面有我的解决方案,但修改 npm 包终究不太好,刚刚终于研究出了在main.js 中使用一段代码解决这个问题的方法

  /** uni-app composition api补丁 */ (() => {  
    /** uni-app 会在 beforeUpdate 的时候调用这个函数来进行和微信进程数据的交换 */  
    const oldPatch = Vue.prototype.__patch__ as Function;  
    Vue.prototype.__patch__ = function(...arg: any) {  
      补丁(this);  
      oldPatch.call(this, ...arg);  
    };  

    function 补丁(vm: any) {  
      if (vm._computedWatchers === undefined) {  
        vm._computedWatchers = {};  
      }  
      const ret = vm._data;  
      var rawBindings = getRawBindings(vm);  
      if (rawBindings) {  
        Object.keys(rawBindings).forEach(function(key) {  
          // && vm.mpType === "component"  
          if (config.is_dev) {  
            /** 开发版补丁 */  
            const v = rawBindings[key];  
            // console.log("[ret[key]] " + key, ret[key], v);  
            if (isRef(v)) {  
              if (isReadonly(v)) {  
                /**  只读的值一般是计算属性,所以放到computed中,要是放到data中uni-app会尝试写,这样导致报错 */  
                vm._computedWatchers[key] = v;  
              } else {  
                ret[key] = v.value;  
              }  
            } else {  
              ret[key] = v;  
            }  
          } else {  
            /** 编译版补丁 */  
            ret[key] = undefined;  
          }  
        });  
      }  
    }  
    function getRawBindings(vm: any) {  
      return vm.__composition_api_state__ && vm.__composition_api_state__.rawBindings;  
    }  
  })();

只需要在加上这段代码即可编译后也能正常使用 composition-api 了。composition-api 真滴香

继续阅读 »

一开始我按照 composition-api 官方文档 中所说的引入 import VueCompositionAPI from "@vue/composition-api"; 然后使用 Vue.use(VueCompositionAPI); 在开发模式下一切完美。

但编译之后就不行了,在网上找到了 https://github.com/dcloudio/uni-app/issues/1839 ,里面有我的解决方案,但修改 npm 包终究不太好,刚刚终于研究出了在main.js 中使用一段代码解决这个问题的方法

  /** uni-app composition api补丁 */ (() => {  
    /** uni-app 会在 beforeUpdate 的时候调用这个函数来进行和微信进程数据的交换 */  
    const oldPatch = Vue.prototype.__patch__ as Function;  
    Vue.prototype.__patch__ = function(...arg: any) {  
      补丁(this);  
      oldPatch.call(this, ...arg);  
    };  

    function 补丁(vm: any) {  
      if (vm._computedWatchers === undefined) {  
        vm._computedWatchers = {};  
      }  
      const ret = vm._data;  
      var rawBindings = getRawBindings(vm);  
      if (rawBindings) {  
        Object.keys(rawBindings).forEach(function(key) {  
          // && vm.mpType === "component"  
          if (config.is_dev) {  
            /** 开发版补丁 */  
            const v = rawBindings[key];  
            // console.log("[ret[key]] " + key, ret[key], v);  
            if (isRef(v)) {  
              if (isReadonly(v)) {  
                /**  只读的值一般是计算属性,所以放到computed中,要是放到data中uni-app会尝试写,这样导致报错 */  
                vm._computedWatchers[key] = v;  
              } else {  
                ret[key] = v.value;  
              }  
            } else {  
              ret[key] = v;  
            }  
          } else {  
            /** 编译版补丁 */  
            ret[key] = undefined;  
          }  
        });  
      }  
    }  
    function getRawBindings(vm: any) {  
      return vm.__composition_api_state__ && vm.__composition_api_state__.rawBindings;  
    }  
  })();

只需要在加上这段代码即可编译后也能正常使用 composition-api 了。composition-api 真滴香

收起阅读 »

ios toDataURL 问题

修改 ios 打包时的内核

tips:
首先 要确保 海报生成 在safai 正常,多看看 html2canvas 的使用,调整

修改 ios 打包时的内核

tips:
首先 要确保 海报生成 在safai 正常,多看看 html2canvas 的使用,调整

电话状态监听、接听电话、挂断电话、来电自动接听、来电自动挂断、回调手机号码(ios、android)

电话状态监听、接听电话、挂断电话、来电自动接听、来电自动挂断、回调手机号码(ios、android):https://ext.dcloud.net.cn/plugin?id=8756

继续阅读 »

电话状态监听、接听电话、挂断电话、来电自动接听、来电自动挂断、回调手机号码(ios、android):https://ext.dcloud.net.cn/plugin?id=8756

收起阅读 »

canvas 的 canvas-id 设置无效

我这边使用 插件市场的uQRCode二维码生成插件,但是在设置动态canvas-id时候一直无效,导致后续uni.canvasToTempFilePath()一直无法获取到canvas

我这边使用 插件市场的uQRCode二维码生成插件,但是在设置动态canvas-id时候一直无效,导致后续uni.canvasToTempFilePath()一直无法获取到canvas

监听uniapp页面滚动结束的方法

  1. 监听页面生命周期 onReachBottom 链接: https://uniapp.dcloud.io/collocation/frame/lifecycle
  2. page-meta 标签 有一个事件 @scrolldone 可以直接监听页面滚动结束
  3. 引入了一个组件,组件中要监听页面滚动结束,就不能用 页面生命周期 了
    在 <scroll-view></scroll-view>监听滚动事件( 注意:必须给scroll-view标签设定高度,不然事件没有效果),@scroll="addClass",
    data中定义了2个变量, scroll_end(为真滚动结束),scrollTop (页面滚动的高度)

                        addClass(event){  
                this.scroll_end = false;  
                const that = this;  
                this.scrollTop = event.detail.scrollTop;  
                clearTimeout(timer);  
                var timer = setTimeout(function(){  
                    if( event.detail.scrollTop === that.scrollTop ){  
                        that.scroll_end = true;  
                        console.log(that.scroll_end,"是否结束",event.detail.scrollTop, "data", that.scrollTop )  
                        clearTimeout(timer);  
                        timer = null;  // 处理回收   
                    }  
    
                }, 500)  
            },
    效果展示: 绑定的是 animate.css 的class class="{'animate__backOutRight': !scroll_end, 'animate__backInRight' : scroll_end }"
继续阅读 »
  1. 监听页面生命周期 onReachBottom 链接: https://uniapp.dcloud.io/collocation/frame/lifecycle
  2. page-meta 标签 有一个事件 @scrolldone 可以直接监听页面滚动结束
  3. 引入了一个组件,组件中要监听页面滚动结束,就不能用 页面生命周期 了
    在 <scroll-view></scroll-view>监听滚动事件( 注意:必须给scroll-view标签设定高度,不然事件没有效果),@scroll="addClass",
    data中定义了2个变量, scroll_end(为真滚动结束),scrollTop (页面滚动的高度)

                        addClass(event){  
                this.scroll_end = false;  
                const that = this;  
                this.scrollTop = event.detail.scrollTop;  
                clearTimeout(timer);  
                var timer = setTimeout(function(){  
                    if( event.detail.scrollTop === that.scrollTop ){  
                        that.scroll_end = true;  
                        console.log(that.scroll_end,"是否结束",event.detail.scrollTop, "data", that.scrollTop )  
                        clearTimeout(timer);  
                        timer = null;  // 处理回收   
                    }  
    
                }, 500)  
            },
    效果展示: 绑定的是 animate.css 的class class="{'animate__backOutRight': !scroll_end, 'animate__backInRight' : scroll_end }"
收起阅读 »

有人需要插件市场直播插件的UI模板吗?带货弹幕基础的美颜都有,便宜售出,跳楼价

插件市场 插件 直播

有人需要插件市场直播插件的UI模板吗?带货弹幕基础的美颜都有,可以自己改动
麻烦联系qq:1037606624, 便宜售出,跳楼价

有人需要插件市场直播插件的UI模板吗?带货弹幕基础的美颜都有,可以自己改动
麻烦联系qq:1037606624, 便宜售出,跳楼价

IOS平台hybrid模式发布后的版本页面空白

uniapp

如题,我在使用HBuilderX工具编译调试hybrid页面的时候页面显示正常,下面两张图片,一个是HBuilderX编译的,一个是正式版发布后的。

是我哪里没配置好吗,用的是WKWebview的内核了,感觉也不关内核事情,但线上的发布版本hybrid就是显示不了任何东西

继续阅读 »

如题,我在使用HBuilderX工具编译调试hybrid页面的时候页面显示正常,下面两张图片,一个是HBuilderX编译的,一个是正式版发布后的。

是我哪里没配置好吗,用的是WKWebview的内核了,感觉也不关内核事情,但线上的发布版本hybrid就是显示不了任何东西

收起阅读 »

设置了程序的web browser 用ie11 启动程序后不生效

悬赏园豆:10 [待解决问题] 浏览: 12次
RegistryKey reg = Registry.LocalMachine;
using (RegistryKey run = reg.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true))
{
var key = "ch2.Spider.SiteManager.exe";
var value = run.GetValue(key);
if (value == null)
{
try
{
Int32 tempInt = 0;
unchecked
{
tempInt = (Int32)0x2AF9;
}https://q.cnblogs.com/q/128360/

                run.SetValue(key, tempInt, RegistryValueKind.DWord);  
                MessageBox.Show("  当前应用程序已成功写入注册表!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);  
            }  
            catch (Exception ex)  
            {  
                MessageBox.Show(ex.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);  
            }  
        }  
        else  
        {  
            MessageBox.Show(value.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);  
        }
继续阅读 »

悬赏园豆:10 [待解决问题] 浏览: 12次
RegistryKey reg = Registry.LocalMachine;
using (RegistryKey run = reg.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", true))
{
var key = "ch2.Spider.SiteManager.exe";
var value = run.GetValue(key);
if (value == null)
{
try
{
Int32 tempInt = 0;
unchecked
{
tempInt = (Int32)0x2AF9;
}https://q.cnblogs.com/q/128360/

                run.SetValue(key, tempInt, RegistryValueKind.DWord);  
                MessageBox.Show("  当前应用程序已成功写入注册表!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);  
            }  
            catch (Exception ex)  
            {  
                MessageBox.Show(ex.Message.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);  
            }  
        }  
        else  
        {  
            MessageBox.Show(value.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);  
        }
收起阅读 »

利用WordPress作为后端快速生成多端小程序和APP

5+App开发 百度小程序 支付宝小程序 微信小程序 WordPress

WordPress 作为后端生成多端小程序、快应用及APP,可用于资讯、新闻、博客、企业官网等

后端使用开源博客建站系统wordpress和小程序开源版插件,前端使用uniapp。 已测试多端小程序和APP,均可稳定运行,暂时未测试快应用。

因为没有用到互动功能,所以后端其实不用设置appid和密钥那些东西 。

案例演示
安卓APP:https://wwa.lanzous.com/iWVq9e8tc6j
H5演示:https://h5.wpnicer.com/
小程序和快应用没有上线,暂时没有演示

截图展示



使用方法
后端

  1. 搭建wordpress网站,推荐使用nginx1.18+php7.3+mysql5.6
  2. 在wordpress插件市场搜索“REST API TO MiniProgram”安装并启用插件
  3. 设置wordpress固定连接及伪静态规则,推荐使用/%post_id%.html
  4. 在浏览器输入https://xxx.com/wp-json/wp/v2/posts 或在浏览器输入https://xxx.com/wp-json/wp/v2 如果有数据输出则说明设置没有问题,如果出现404或者其他问题则说明伪静态没有设置好
  5. 设置开源版插件中的
    小程序首页滑动文章ID
    在小程序里显示的文章分类id
    选择"关于"页面
    开启小程序的评论
    开启评论审核
    海报图片默认地址

前端
1.在uniapp插件市场搜索“wordpress”选择此项目https://ext.dcloud.net.cn/plugin?id=2214
​2.将本项目导入HbuilerX
3.设置/utils/config.js下的域名及首页导航信息
4.保存编译即可

继续阅读 »

WordPress 作为后端生成多端小程序、快应用及APP,可用于资讯、新闻、博客、企业官网等

后端使用开源博客建站系统wordpress和小程序开源版插件,前端使用uniapp。 已测试多端小程序和APP,均可稳定运行,暂时未测试快应用。

因为没有用到互动功能,所以后端其实不用设置appid和密钥那些东西 。

案例演示
安卓APP:https://wwa.lanzous.com/iWVq9e8tc6j
H5演示:https://h5.wpnicer.com/
小程序和快应用没有上线,暂时没有演示

截图展示



使用方法
后端

  1. 搭建wordpress网站,推荐使用nginx1.18+php7.3+mysql5.6
  2. 在wordpress插件市场搜索“REST API TO MiniProgram”安装并启用插件
  3. 设置wordpress固定连接及伪静态规则,推荐使用/%post_id%.html
  4. 在浏览器输入https://xxx.com/wp-json/wp/v2/posts 或在浏览器输入https://xxx.com/wp-json/wp/v2 如果有数据输出则说明设置没有问题,如果出现404或者其他问题则说明伪静态没有设置好
  5. 设置开源版插件中的
    小程序首页滑动文章ID
    在小程序里显示的文章分类id
    选择"关于"页面
    开启小程序的评论
    开启评论审核
    海报图片默认地址

前端
1.在uniapp插件市场搜索“wordpress”选择此项目https://ext.dcloud.net.cn/plugin?id=2214
​2.将本项目导入HbuilerX
3.设置/utils/config.js下的域名及首页导航信息
4.保存编译即可

收起阅读 »