Я пытаюсь сделать снимок экрана в моем приложении cordova, используя этот плагин, но возникает ошибка. Я не знаю, что такое ошибка, поскольку я тестирую ее на своем Android-смартфоне, и приложение просто блокирует. В браузере то же самое происходит с этой ошибкой: TypeError: Cannot read property 'save' of undefined
, где «save» исходит из этого кода:
navigator.screenshot.save(function(error,res){ if(error){ console.error(error); }else{ console.log('ok',res.filePath); } });
PS: Также попробовал navigator.plugin.screenshot...
, navigator.plugins.screenshot
, window.screenshot
, window.plugin.screenshot
и window.plugins.screenshot
PS2: Я проверил, установлен ли плагин с cordova plugins
cordova в CLI cordova, и все в порядке, плагин существует в папке плагинов и для версии cordova> = 3.0.0, а мой – новее
Но, конечно, браузер не загружает плагин, потому что эта ошибка также возникает там: Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:23273/www/cordova_plugins.json
. Снимок экрана не сделан, он проверяется на моем смартфоне.
Я использую Worklight и сталкивался с той же проблемой. Мое решение состояло в том, чтобы изменить код файла Screenshot.js на:
var formats = ['png','jpg']; function Screenshot() { } Screenshot.prototype.save = function (callback,format,quality, filename) { format = (format || 'png').toLowerCase(); filename = filename || 'screenshot_'+Math.round((+(new Date()) + Math.random())); if(formats.indexOf(format) === -1){ return callback && callback(new Error('invalid format '+format)); } quality = typeof(quality) !== 'number'?100:quality; cordova.exec(function(res){ callback && callback(null,res); }, function(error){ callback && callback(error); }, "Screenshot", "saveScreenshot", [format, quality, filename]); }; Screenshot.install = function () { if (!window.plugins) { window.plugins = {}; } window.plugins.screenshot = new Screenshot(); return window.plugins.screenshot; }; cordova.addConstructor(Screenshot.install);
Таким образом, я могу сделать вызов с помощью следующего кода:
window.plugins.screenshot.save(function(error,res){ if(error){ alert(error); }else{ alert('ok',res.filePath); //should be path/to/myScreenshot.jpg } },'jpg',50,'myScreenShot');
Это отлично работало на моем смартфоне Android.
Я также добавил файл res / xml / config.xml:
<feature name="Screenshot"> <param name="android-package" value="org.apache.cordova.screenshot.Screenshot"/> </feature>
В файле AndroidManifest.xml:
<uses-permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE" />
И добавил класс java в следующем пакете: org.apache.cordova.screenshot.Screenshot
Все эти конфигурации содержат информацию в файле plugin.xml плагина
Загружаете ли вы свой проект в localhost? Почему у вас есть такой файл:
http://localhost:23273/www/cordova_plugins.json.
?
Вы пытаетесь имитировать проект кордовы с «кордовой службой 23273»? Вы не можете использовать какой-либо плагин с «кордовой службой».
У вас должен быть файл: /// как протокол …
Спасибо всем, к сожалению, я не могу дать реальный ответ на этот вопрос, поскольку я многое сделал. Последнее заключалось в том, чтобы обновить файл cordova.js до последней версии, что фактически решило мою проблему, но каждый комментарий и ответ помогли многим.
Я хочу поблагодарить как @Talysson de Castro, так и @Darktalker за то, что помогли мне! 🙂