精华内容
下载资源
问答
  • AndroidVue项目交互

    2021-06-08 02:12:41
    1. Android代码class MainActivity : AppCompatActivity() {private lateinit var callJSBtn: Buttonprivate lateinit var webView: WebViewprivate var ajObject: AjObject = AjObject()override fun onCreate...

    1. Android代码

    class MainActivity : AppCompatActivity() {

    private lateinit var callJSBtn: Button

    private lateinit var webView: WebView

    private var ajObject: AjObject = AjObject()

    override fun onCreate(savedInstanceState: Bundle?) {

    super.onCreate(savedInstanceState)

    setContentView(R.layout.activity_main)

    initViews()

    }

    private fun initViews() {

    callJSBtn = findViewById(R.id.call_js_btn)

    callJSBtn.setOnClickListener(View.OnClickListener {

    webView.post(Runnable {

    webView.loadUrl("javascript:callJS('Message From Vue')")

    })

    })

    webView = findViewById(R.id.web_view)

    webView.settings.allowFileAccess = true

    webView.settings.javaScriptEnabled = true

    webView.webViewClient = object : WebViewClient() {

    override fun shouldOverrideUrlLoading(

    view: WebView?,

    url: String?

    ): Boolean {

    view?.loadUrl(url)

    return true

    }

    override fun onPageFinished(view: WebView?, url: String?) {

    super.onPageFinished(view, url)

    }

    }

    webView.loadUrl("http://192.168.1.110:8080/")

    webView.addJavascriptInterface(ajObject, "android")

    }

    }

    class AjObject {

    @JavascriptInterface

    fun callJava(msg: String) : String {

    return "Message From Android"

    }

    }

    2. Vue代码

    在Vue项目下创建utils/jsToAndroid.js

    //jsToAndroid.js

    const android = window.android

    export {

    android

    }

    在HelloWorld.vue中引入jsToAndroid.js

    //HelloWorld.vue

    {{ msg }}

    Click

    import {android} from '../utils/jsToJava'

    export default {

    data() {

    return {

    msg: "Hello"

    }

    },

    mounted() {

    window.callJS = this.callJS

    },

    methods: {

    callJS(str) {

    if (str !== undefined && str !== "") {

    this.msg = str

    }

    // return "message from javascript"

    },

    callJava() {

    this.msg = android.callJava('jack')

    }

    },

    }

    h3 {

    margin: 40px 0 0;

    }

    ul {

    list-style-type: none;

    padding: 0;

    }

    li {

    display: inline-block;

    margin: 0 10px;

    }

    a {

    color: #42b983;

    }

    效果图

    4753ca08b65aca1877ab7d3a5441f14b.png

    点击Call JavaScript,Android调用Vue

    754388bf06827ec23bb9fdef3af59161.png

    点击Click,Vue调用Android方法

    035a7625a3a43b4d9bfe565bb12d3e12.png

    来源:oschina

    链接:https://my.oschina.net/yuewawa/blog/4329536

    展开全文
  • 前提:需要首先实现web端的网页上传图片(只要网页上传图片成功,后续集成和android部分的相关操作,就可以成功实现图片上传) 步骤: web端实现网页上传 web嵌入安卓webview实现安卓手机拍照和选择图片上传 问题...

    前提:需要首先实现web端的网页上传图片(只要网页上传图片成功,后续集成和android部分的相关操作,就可以成功实现图片上传)

    步骤:

    1. web端实现网页上传
    2. web嵌入安卓webview实现安卓手机拍照和选择图片上传

    问题:

    1. 对安卓开发不太了解的web开发小伙伴,需要粗略的了解一下安卓开发的一些基本内容,这一步需要自己去适当的学习,如果这一步没有,那就不用往下看了
    2. 图片上传和拍照上传,需要的一些权限
    3. 高安卓版本的手机拍照上传,需要进行的额外操作

    web端实现网页上传的代码这边就不赘述了,需要了解的,可以联系我vx: 18918813817

    接下来就是安卓部分的相关代码

    // 拍照 + 文件选择
    private android.webkit.ValueCallback<Uri[]> mUploadCallbackAboveL;
    private Uri imageUri;
    private int REQUEST_CODE = 1234;
    
    // 需要实现图片上传,需要重载onShowFileChooser方法
    private WebChromeClient webChromeClient = new WebChromeClient() {
        @Override
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
            mUploadCallbackAboveL = filePathCallback;
            try {
                takePhoto();
            } catch (Exception e) {
                Log.e("JKT", e.toString());
            }
            return true;
        }
    };
    

    这里是重载了onShowFileChooser方法,低版本的android是重载另外一个方法(低版本好像是<=4.0,个人觉得版本太低,可能已经没有什么需求是要适应这种版本的手机了,如果你需要了解低版本,自行百度吧)

    好,下面开始takePhoto这个函数的重点部分

    /**
         * 调用相机
         */
        private void takePhoto() {
            // 指定拍照存储位置的方式调起相机
            String filePath = Environment.getExternalStorageDirectory() + File.separator
                    + Environment.DIRECTORY_PICTURES + File.separator;
            String fileName = "IMG_" + DateFormat.format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg";
            File fileUri =  new File(filePath + fileName);
            imageUri = Uri.fromFile(fileUri);
            // 这里针对高版本的android需要进行特殊的图片路径设置,重点1
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                imageUri = FileProvider.getUriForFile(MainActivity.this, BuildConfig.APPLICATION_ID + ".provider", fileUri);
            }
    
    
            Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            captureIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
    
            Intent Photo = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    
            Intent chooserIntent = Intent.createChooser(Photo, "Image Chooser");
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Parcelable[]{captureIntent});
    
            startActivityForResult(chooserIntent, REQUEST_CODE);
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == REQUEST_CODE) {
                if (resultCode == 0) {
                    // 这里需要对相机,和读取文件权限做检查,没有权限需要授权,重点2
                    this.checkCameraPermissions();
                }
                if (mUploadCallbackAboveL != null) {
                    chooseAbove(resultCode, data);
                } else {
                    Toast.makeText(this, "发生错误", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
        /**
         * Android API >= 21(Android 5.0) 版本的回调处理
         * @param resultCode 选取文件或拍照的返回码
         * @param data 选取文件或拍照的返回结果
         */
        // 重点3: 获取android的activity回调(也就是文件的数据),对拍照上传和选择图片上传分开处理
        private void chooseAbove(int resultCode, Intent data) {
            Log.e("JKT", "返回调用方法--chooseAbove");
    
            if (RESULT_OK == resultCode) {
                updatePhotos();
    
                if (data != null) {
                    // 这里是针对从文件中选图片的处理
                    Uri[] results;
                    Uri uriData = data.getData();
                    if (uriData != null) {
                        results = new Uri[]{uriData};
                        for (Uri uri : results) {
                            Log.e("JKT", "系统返回URI:" + uri.toString());
                        }
                        mUploadCallbackAboveL.onReceiveValue(results);
                    } else {
                        mUploadCallbackAboveL.onReceiveValue(null);
                    }
                } else {
                    Log.e("JKT", "自定义结果:" + imageUri.toString());
                    mUploadCallbackAboveL.onReceiveValue(new Uri[]{imageUri});
                }
            } else {
                mUploadCallbackAboveL.onReceiveValue(null);
            }
            mUploadCallbackAboveL = null;
        }
    
        private void updatePhotos() {
            // 该广播即使多发(即选取照片成功时也发送)也没有关系,只是唤醒系统刷新媒体文件
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
            intent.setData(imageUri);
            sendBroadcast(intent);
        }
    
        private void checkCameraPermissions () {
            List<String> permissiongList = new ArrayList<>();
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
                permissiongList.add(Manifest.permission.CAMERA);
            }
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                permissiongList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            }
            if (!permissiongList.isEmpty()) {
                String[] permissions = permissiongList.toArray(new String[permissiongList.size()]);
                ActivityCompat.requestPermissions(this, permissions, 1);
            }
        }
    
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
            switch (requestCode) {
                case 1:
                    if (grantResults.length > 0){
                        for (int result : grantResults) {
                            if (result != PackageManager.PERMISSION_GRANTED) {
                                Toast.makeText(getApplicationContext(), "需用户同意使用相关权限,才能正常使用该功能", Toast.LENGTH_SHORT).show();
                                return;
                            }
                        }
                    } else {
                        Toast.makeText(getApplicationContext(), "系统发生未知错误,即将退出", Toast.LENGTH_SHORT).show();
                        finish();
                    }
                    break;
                default:
                    break;
            }
        }

    到了这里,应该上传图片,和拍照上传图片的问题应该可以解决了,但是当你使用高版本android手机进行拍照上传的时候,发现没有上传成功

    通过日志发现,未能获取到读取文件相关权限吧,这是因为android高版本的手机对文件读写进行了额外的操作吧(<!--在安卓7.0以上禁止在应用外部公开 file://URI-->),所以需要我们多一些设置

    在AndroidManifest.xml中添加provider
    
            <provider
                android:name="androidx.core.content.FileProvider"
                android:authorities="${applicationId}.provider"
                android:grantUriPermissions="true"
                android:exported="false">
                <meta-data
                    android:name="android.support.FILE_PROVIDER_PATHS"
                    android:resource="@xml/file_path" />
            </provider>
    
    在res目录下新建xml文件夹,新建文件file_path.xml
    <?xml version="1.0" encoding="utf-8"?>
    <paths xmlns:android="http://schemas.android.com/apk/res/android">
        <external-path
            name="external_files"
            path="." />
    </paths>

    OK,拍照上传和文件上传的具体实现就大概这么多吧,遇到了一些问题,主要是权限相关的,还有安卓高版本文件读写的问题

    因为是一枚web开发人员,android开发经验不多,了解的也不够透彻,所以如果有问题,希望看友可以指出来,非常感谢!

    互相学习,共同进步!

    展开全文
  • Cordova + vue 打包安卓[Android] apk 及 Apk版本自动升级及安装[实时获取下载进度]准备一、Cordova + vue 打包安卓(Android) apk1.安装Cordova环境2.新建Cordova项目(建议放在英文目录下)3.Vue项目打包放入...

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


    准备

    环境:node.js , 安卓sbk , jdk , npm
    node.js官网: https://nodejs.org/zh-cn/ 下载安装node.js , 安装完成后在命令行(cmd)中使用“node -v”,检验是否安装成功。
    npm:新版node已经集成了npm,在命令行输入“npm -v”,测试是否安装成功。


    一、Cordova + vue 打包安卓(Android) apk

    1.安装Cordova环境

    使用:

    npm install -g cordova 
    

    来全局安装cordova
    安装完成后使用:cordova -v 检验是否安装成功
    在这里插入图片描述

    2.新建Cordova项目(建议放在英文目录下)

    执行行命令

    cordova create myApp
    

    myapp - cordova目录名

    cd myApp 进入目录

    使用命令

    cordova platform add android
    

    来生成Android平台的cordova库,这时platforms文件夹中会生成一个android文件夹。
    在生成的cordova文件中 :
    config.xml -包含应用相关信息,使用到的插件以及面向的平台
    platforms – 包含应用运行平台如 Android 和 iOS 上对应的 Cordova 库
    plugins – 包含应用所需插件的 Cordova 库,使得应用能够访问例如照相机和电池状态相关的事项。
    www – 包含应用源代码,例如 HTML, JavaScript 和 CSS 文件
    hooks – 包含为个性化应用编译系统所需的脚本

    到这里,cordova项目就已经建好了。

    3.Vue项目打包放入cordova项目

    (如果还没有vue项目请看这篇博客:https://www.cnblogs.com/qirui/p/8421372.html)

    需要先将vue.config.js中publicPath属性改为:”/” (没有vue.config.js文件可以百度一个模板自己在根目录创建一个)
    在这里插入图片描述
    然后使用打包命令

    npm run build
    

    之后将打包文件夹下的文件(默认打包在dist文件夹下)全部复制到cordova项目下的www目录中(将原先www目录中的文件全部删除)

    4.调试打包apk软件

    在打包之前,检查打包相关环境是否正确安装,在cordova项目文件夹下执行命令。

    cordova requirements
    

    即可查看当前环境中安装情况。显示如下即标识环境正确安装。(确认安装正确即可,不需要每次都去进行检查)
    在这里插入图片描述
    联调Android软件(需要连接真机或模拟器)

    cordova run android
    

    5.打包成安卓apk

    执行命令

    cordova build android -release
    

    即可打包为发布版apk
    在这里插入图片描述
    红框标出来的就是apk所在的路径

    6.APK签名

    APK都必须经过数字签名后才能安装到设备上,签名需要对应的证书(keystore),大部分情况下 APK 都采用的自签名证书,就是自己生成证书然后给应用签名。
    数字签名证书是给APK打包所必需的文件,所以要先把数字签名证书生成。

    在命令行输入:

    keytool -genkey -v -keystore D:\mytest.keystore -alias mytest -keyalg RSA -validity 20000
    

    -keystore D:/mytest.keystore表示生成的证书及其存放路径,如果直接写文件名则默认生成在用户当前目录下;
    -alias mytest 表示证书的别名是mytest,不写这一项的话证书名字默认是mykey;
    -keyalg RSA 表示采用的RSA算法;
    -validity 20000表示证书的有效期是20000天。

    填写完相关信息后在最后[否]那里输入y
    在这里插入图片描述
    生成后的证书文件
    在这里插入图片描述

    之后将证书与apk放在同一目录下
    命令行输入:

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore myapp.keystore app-release-unsigned.apk myapp
    

    进行签名操作
    在这里插入图片描述
    此时apk就已经是带签名的apk了。

    7.常见的问题

    在这里插入图片描述
    大概意思就是说打包的目录有中文, 可以在配置文件中加入android.overridePathCheck=true来忽略此错误。
    …\myapp\platforms\android 在这个目录下找到gradle.properties文件。
    在这里插入图片描述
    将android.overridePathCheck=true 加入即可
    在这里插入图片描述

    二、Apk版本自动升级及安装(实时获取下载进度)

    1.安装安卓插件

    进入cordova项目根目录
    输入命令行

    cordova plugin add cordova-plugin-app-version //获取版本号
    cordova plugin add cordova-plugin-file
    cordova plugin add cordova-plugin-file-opener2
    cordova plugin add cordova-plugin-file-transfer
    cordova plugin add cordova-plugin-whitelist
    

    2.添加cordova.js

    vue项目的index.html中加入

    <script src="cordova.js"></script>在这里插入图片描述

    3.创建版本更新js

    创建upgrade.js

    import apis from '@/request'
    import { Dialog } from 'vant';
    
    Dialog.setDefaultOptions({
        confirmButtonColor:"#006BE0",
        closeOnPopstate:false
    })
    //检测新版本升级
    export function upgradeForAndroid(releasePath, packageName) {
        //从window中获取Cordova对象
    var cordova = window.cordova
    //apk所在的服务器路径(下载路径)
        var url = process.env.VUE_APP_APK_URL + process.env.VUE_APP_APK_NAME + ".apk"; 
        var targetPath = cordova.file.externalCacheDirectory + "Download/Pass/" + "test.apk"; //要下载的目标路径及文件名(本地存储路径)
        var trustHosts = true;
        var options = {};
        console.log("url:" + url);
        console.log("targetPah:" + targetPath);
        console.log("trustHost:" + trustHosts);
        downLoadApp();
        function downLoadApp() {
            // 初始化FileTransfer对象
            // eslint-disable-next-line no-undef
            var fileTransfer = new FileTransfer();
            fileTransfer.onprogress = function (progressEvent) {
                if (progressEvent.lengthComputable) {
                    var downloadProgress = (progressEvent.loaded / progressEvent.total) * 100;
                    var result = "已下载:" + Math.floor(downloadProgress) + "%";
                    console.log(result,"已经下载")
                    
                    if(Math.floor(downloadProgress) == 100){
                        Dialog.alert({
                            title: result,
                            message:"下载完成后会自动弹出安装",
                            showConfirmButton:false,
                            showCancelButton:true
                        }).then(
                        ).catch(() => {
                            // on cancel
                            navigator.app.exitApp();
                        })
                    }else{
                        Dialog.alert({
                            title: result,
                            message:"下载完成后会自动弹出安装",
                            showConfirmButton:false,
                            showCancelButton:false
                        })
                    }
                }
            };
            // 调用download方法
            fileTransfer.download(
                url, //uri网络下载路径
                targetPath, //url本地存储路径
                function (entry) {
                    console.log("download complete: " + entry.toURL());
                    cordova.plugins.fileOpener2.open(
                        targetPath,
                        'application/vnd.android.package-archive',
                        {
                            error: function (e) {
                                console.log('Error status: ' + e.status + ' - Error message: ' + e.message);
                                Dialog.alert({
                                    title: "打开下载文件失败",
                                    message:"请退出后重新进入应用",
                                }).then(res => {
                                    navigator.app.exitApp();
                                })
                            },
                            success: function () {
                                console.log('open successfully');
                            }
                        })
                },
                function (error) {
                    // AlertModule.show({ title: "下载失败" })
                    console.log("download error source " + error.source);
                    console.log("download error target " + error.target);
                    console.log("upload error code" + error.code);
                }
            );
        }
    }
    /*
     * 检测升级方法
     */
    export function checkUpgrade(locationVersion) {
        /**
        * 从服务器获取应用的版本信息,和本地应用版本对比
        */
        apis.updateVersion.getAppVersion().then(response => {
            if(response != null){
                var serverVersion = response.data.appVersion;
                //获取本地App版本;
                console.log("本地版本:" + locationVersion);
                console.log("服务器版本:" + serverVersion);
                var locationVersionNum = parseInt(locationVersion.replace(/\./g,""))
                var serverVersionNum = parseInt(serverVersion.replace(/\./g,""))
                if(locationVersionNum < serverVersionNum){
                    Dialog.confirm({
                        title: '发现版本: ' + serverVersion + ',请进行升级',
                        message: '建议您在WIFI环境下升级',
                    }).then(() => {
                        // on confirm
                        upgradeForAndroid()
                    }).catch(() => {
                        // on cancel
                        navigator.app.exitApp();
                    });
                }
            }
        })
        // 监听网络状况,无网络时
        document.addEventListener('offline', function () {
            console.log("网络异常,不能连接到服务器!");
            Dialog.alert({
                title:"网络异常,不能连接到服务器!",
                message:"请在连接网络的情况下升级应用"
            }).then(() => {
                navigator.app.exitApp();
            })
        }, false);
    }
    

    apis:封装的请求实例
    Dialog:弹窗组件 这里引用的是v-vant的弹窗插件

    4.调用版本更新

    在进入app的地方调用这个js中的方法
    在这里插入图片描述
    在这里插入图片描述
    服务端需要做的就是需要存储一个当前的版本号供app发请求去和本地的版本号做对比,还有将新版本的apk上传到服务器的一个位置供app去下载。

    5.打包注意事项

    打包时要注意将版本号升级
    进入cordova项目的根目录找到config.xml
    在这里插入图片描述
    在这里更改版本号
    在这里插入图片描述

    6.其他注意事项

    安卓9.0版本以上请求必须使用https请求,否则请求会被强制结束,状态码返回0

    如果需要使用http请求,在(…/platforms/android/app/src/main/AndroidManifest.xml)加入android:usesCleartextTraffic="true
    在这里插入图片描述
    在这里插入图片描述
    即可解决该问题。

    展开全文
  • vue 安卓调用h5方法

    2021-01-06 14:37:14
    async mounted() { //将要给原生调用的方法挂载到 window 上面 let me = this; window['getAppPhone'] = (参数) => { me.getAppPhone(参数); } } ... // app端调用此方法,传递手机号 ......
    async mounted() {
        //将要给原生调用的方法挂载到 window 上面
        let me = this;
        window['getAppPhone'] = (参数) => {
          me.getAppPhone(参数);
        }
    }
    
    methods: {
        // app端调用此方法,传递手机号
        getAppPhone(参数){
            ……
        }
    }

     

    展开全文
  • vue打包安卓

    2021-06-17 11:37:04
    打包安卓使用 Hbuilder 的路径需要注意 vue项目里面打包出来 需要服务器运行 所以 一直给了一个url 路由 /a/b/c 类似这样的 我们需要去项目里面去 修改 比如最新的脚手架 提供了 vue.config.js文件 把打包publicpath...
  • 安卓机键盘弹出遮挡下面的input框问题修复 代码块 created(){ this.apply(); } methods:{ apply(){ var clientHeight=document.documentElement.clientHeight || document.body.clientHeight windiw.onresize...
  • vue在7.0的android手机上, 出现白屏, js加载失败. 排除publishPath 检查路由问题. 设置路由的时候, 不能使用"..."展开数组 打开页面白屏, this.list = {...this.list} 换成this.$forceUpdate()
  • vue 连接地址下载 PDF

    2021-07-30 19:24:25
    href 是地址 // if(appConfigs.urlWebHttp!=""){ // const link = document.createElement("a");... // const fileName = "凭证... //下载文件的名字 // link.href = appConfigs.urlWebHttp + data; // link.setAtt.
  • 因为工作需要,仅仅只会安卓开发已经不能满足公司的需求了,mui又感觉少了点什么,所以最近开始研究cordova+vue的方式开发移动应用,暂时还是只开发安卓端,iOS以后在慢慢研究,废话不多说直接上菜: 首先这一套...
  • 已在Android4.4上跑通未能兼容ios9, 会报一个type error, 但是又没有其他任何信息, 垃圾ios....在vue.config.js中配置相关依赖进行转换一般把第三方库加进去后就不会有es6的语法了, 包括const ,let , ... 等module....
  • 在router钩子函数中获取到安卓传过来的token值 function getGetToken(call) { window.WebViewJavascriptBridge && window.WebViewJavascriptBridge.send( 'webGetToken' , function (responseData) { ...
  • vue接入下载文件接口

    2021-01-29 11:08:27
    vue接入下载文件接口 后端接口返回字节数组或者文件流返回下载的文件时,前端使用vue接入下载文件的方法如下: 前端部分 1.前端下载文件方法 // obj:后端返回的的字节数组或者文件流;name:文件名;suffix:文件后缀...
  • 三步搞定:Vue.js调用Android原生操作

    千次阅读 2020-12-19 09:13:34
    第一步:Android对Js的接口,新建AndroidInterfaceForJs.jsimport android.content.Context;import android.os.Build;import android.os.Handler;import android.os.Looper;import android.support.annotation....
  • 第一部分:js调用android1....这里监听的时候部分普通js和vue js4.不管你用的什么web第三方控件都要实现下面的方法// setJavaScriptEnabled这句代码在用TBS腾讯浏览服务的jar包时,显示过期,但是还是...
  • 最近在用vue写商城H5,打算嵌入到原生app中,但是在调用原生android方法时,却发现调不到android提供的方法这是我调用原生app的方法代码在html页面中 android是好用的,请问一下vue中调原生方法和html中有什么不同吗?...
  • 一、思路 设计动态class,当输入框onfocus状态触发事件激活class,并且滚动到页面底部,当输入框onblur状态关闭class <style> .center-box-input-position { margin-top: 0px;... :class="{'center-box-input...
  • vue不兼容安卓6.0以下版本(移动端): 遭遇情况 项目代码Vue2.0的,当遇到安卓6.0版本的时候会发生页面点击无效,或者是屏幕白屏的情况,用的是一种华为的老机型,安卓版本6.0.系统4.0,我碰到是两种解决办法: 1.将安卓机...
  • vueAndroid之间的传值

    2021-04-12 14:28:23
    1.vue调用Android方法: window.android.方法名 // 方法名后加() 2.vue接收Android传过来的值 methods : { // 接收Android传过来的值方法 getAndroidValue(value) { console.log(value) } }, mounted: { ...
  • 一 在项目根目录下创建js文件:vue.config.js...三 下载HBuilder,创建一个空的5+app项目 四 在在vue项目内运行npm run build打包vue项目 这是打包后的vue项目 这是5+app的目录 把打包后的vue项目复制到5+app项目
  • 一、构建vue项目 1,使用vue-cli4.4.0构建 2,引入vant组件 a,安装vant组件:npm i vant -S b,在项目的public目录下的index.html中引入样式文件<link rel="stylesheet" href=...
  • 1.打包vue项目,在项目的根目录执行命令 npm run build,直至项目打包完成 打开dist文件件,里面有一个index.html和static文件夹。 2.新建cordova项目 2.1安装cordova,命令行执行 npm install -g cordova ...
  • 问题描述:项目中的企业微信内部应用,使用Vue-cli搭建的H5页面web,在低版本的安卓手机或ios8.0、9.0中出现接口数据访问失败,HTTP状态码返回0的问题,无法正常使用系统。安卓手机主要出现问题得机型为oppo、vivo。...
  • 方案背景IOS用的是jsBridge插件实现调用、传参、回调的安卓是在window挂载方法和挂载回调的IOS实现方案调用原生方法封装如下function setupWebViewJavascriptBridge (callback) {if (window.WebViewJavascriptBridge...
  • vue项目在安卓低版本机显示空白原因:可能的原因一查看安卓debug,报错,可能有箭头函数语法错误,或者其他语法问题,那可能是ES6语法问题。这时候需要安装babel-pollyfill。网上找到方法如下:1.安装babel-polyfill...
  • Android7.0之后文件系统禁止向外面公开file://URL路径,必须使用FileProvider通过content://URL 来向外部分享文件 在Android项目的清单列表加入 <provider android:name="androidx.core.content.File...
  • 首先说一下我的应用场景新闻列表是原生的安卓和IOS页面开发的,新闻详情页是我做的,主要是因为新闻页面需要分享出去,所以就写成一个H5的页面了。新闻详情页:原生那边给传一个newID,还需要一个token的值,用来...
  • 1.JS代码//window.onload = function() {var MyComponent = Vue.extend({methods: {vfunc: function() {alert();}},created() {window.vue = this}});var vm = new Vue({el: '#app',components: {'my-component': ...
  • 需求:在线浏览pdf文件,并且禁止掉用户下载打印的效果。分析:普通的iframe、embed标签都只能实现在线浏览pdf的功能,无法禁止掉工具栏的下载打印功能。只能尝试使用插件,pdfobject.js这个插件可以实现功能,而且...
  • 具体代码:(1) 在data中定义默认值data() {return {docmHeight: document.documentElement.clientHeight, //默认屏幕高度showHeight: document.documentElement.clientHeight, //实时屏幕高度hidshow:true, //显示...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,740
精华内容 16,296
关键字:

vue安卓下载

vue 订阅