我试图使用Vue-Cordova和Cordova-plugin-file-opener2一起打开ios/android应用程序中的pdf。
Vue-Cordova在App实例的数据属性上定义与设备相关的插件:
data: function () {
return {
cordova: Vue.cordova,
plugins: {
'cordova-plugin-camera': function () {
if (!Vue.cordova.camera) {
window.alert('Vue.cordova.camera not found !')
return
}
Vue.cordova.camera.getPicture((imageURI) => {
window.alert('Photo URI : ' + imageURI)
}, (message) => {
window.alert('FAILED : ' + message)
}, {
quality: 50,
destinationType: Vue.cordova.camera.DestinationType.FILE_URI
})
},
....我可以在我的ios模拟器上访问这些属性,但是我无法通过cordova-cli访问我安装的插件。应公开给调用file-opener2命令的Cordova对象,如:
cordova.plugins.fileOpener2.open(
filePath,
fileMIMEType,
{
error : function(){ },
success : function(){ }
}
);具有未包含在Vue.cordova实例中的属性。当我尝试使用:Vue.cordova.plugins.fileOpener2访问它们时,就会出现未定义的情况。
有人能告诉我,我需要做什么来添加插件到Vue-Cordova,或者可能绕过它吗?
编辑:
我的解决方案没有效果,但我觉得我已经接近了。
我采取了以下步骤:
node_modules/vue-cordova/index.js中更改了以下内容:
函数(模块、导出、webpack_require) {
‘使用严格’;//列表这里所有支持的插件var pluginsList =‘cordova-plugin-pluginsList’,‘cordova-plugin-设备’,‘cordova-插件-地理定位’,‘cordova-插件-联系人’,‘cordova-插件-文件-opener2’;exports.install =函数(Vue,options) { //声明全局Vue.cordova对象Vue.cordova = Vue.cordova { deviceready: false,plugins:[] };// Cordova事件包装器Vue.cordova.on = function (eventName,cb) { document.addEventListener(eventName,cb,false);};//让Vue知道deviceready已触发document.addEventListener('deviceready',function () { Vue.cordova.deviceready = true;},false);// load supported plugins pluginsList.forEach(function (pluginName) { plugin = __webpack_require__(1)("./“+ pluginName);plugin.install(Vue,options,function ( pluginLoaded ) ){ if (pluginLoaded) { Vue.cordova.plugins.push(pluginName);} if (Vue.config.debug) { console.log('VueCordova',pluginName,'→',pluginLoaded?“加载”:“未加载”;});});};};
// }、/ 1 / //函数(模块、导出、{
var map ={“/cordova-plugin摄像机”:2,“/cordova-plugin-camera.js”:2,"./cordova-plugin-contacts.js":3,“./cordova-plugin-plugin device”:4,"./cordova-plugin-device.js":4,./cordova-plugin-geolocation“:5,”"./cordova-plugin-file-opener2":6 };函数webpackContext( req ) {req(Req){函数()){抛出新错误(“无法找到模块‘+req+”)}() };};webpackContext.keys =函数webpackContextKeys() {返回Object.keys(map);};webpackContext.resolve = webpackContextResolve;module.exports = webpackContext;webpackContext.id = 1;
/*/ }
..。
/*/函数(模块、导出){
‘使用严格’;exports.install =函数(Vue,options,cb) { document.addEventListener('deviceready',函数() { if ( cordova.plugins.fileOpener2 === 'undefined'){返回cb(false);} //通过地理定位对象Vue.cordova.fileOpener2 = cordova.plugins.fileOpener2;返回cb(真);},false);};/** },在执行这三个步骤之后,我希望{{ fileOpener2 }在我的模板中作为一个对象可用,但它不是。我是不是遗漏了什么?
发布于 2017-05-04 07:00:44
你是在等待deviceready事件吗?
一旦这个事件被触发,也许尝试访问你的插件。例子:
Vue.cordova.on('deviceready', () => {
// here check for your variable
})然而,最有可能的是,您没有遵循贡献指南,以支持甘地在那里声明的这个插件。您不应该编辑webpack生成的文件,而应该生成自己的文件:
vue-cordova回购node_modules/vue-cordova替换为克隆回购的符号链接。npm run build (或npm run dev)然后再试着构建你的Cordova应用程序
发布于 2018-01-10 17:52:43
对于那些无法在Vue-Cordova中添加Cordova插件的人来说,这是一个与Webpack有关的问题,
npm install --save-dev babel-preset-envnpm install您应该在根文件夹index.js中找到生成的转换文件。
发布于 2018-08-15 22:48:07
作为另一种选择,在cordova.js中替换这个函数可以适当地加载插件.
function findCordovaPath() {
let platform = cordova.platformId.toUpperCase();
if (platform === 'ANDROID') {
return `file:///android_asset/www/`;
}
else if (platform === 'IOS') {
return `cdvfile://localhost/bundle/www/`;
}
else if (platform === 'OSX') {
return `cdvfile://localhost/bundle/Contents/Resources/www/`;
}
else if (platform === 'WINDOWS') {
return `/www/`;
}
return null;
} https://stackoverflow.com/questions/43629684
复制相似问题