Я добавил плагин в свой ионный проект, поэтому у меня есть код java и код JS следующим образом:
cordova.define("cordova-sms-plugin.Sms", function(require, exports, module) {
'use strict';
var exec = require('cordova/exec');
var sms = {};
function convertPhoneToArray(phone) {
if (typeof phone === 'string' && phone.indexOf(',') !== -1) {
phone = phone.split(',');
}
if (Object.prototype.toString.call(phone) !== '[object Array]') {
phone = [phone];
}
return phone;
}
sms.send = function(phone, message, filename, options, success, failure) {
// parsing phone numbers
phone = convertPhoneToArray(phone);
// parsing options
var replaceLineBreaks = false;
var androidIntent = '';
if (typeof options === 'string') { // ensuring backward compatibility
window.console.warn('[DEPRECATED] Passing a string as a third argument is deprecated. Please refer to the documentation to pass the right parameter: https://github.com/cordova-sms/cordova-sms-plugin.');
androidIntent = options;
}
else if (typeof options === 'object') {
replaceLineBreaks = options.replaceLineBreaks || false;
if (options.android && typeof options.android === 'object') {
androidIntent = options.android.intent;
}
}
// fire
exec(
success,
failure,
'Sms',
'send', [phone, message, filename, androidIntent, replaceLineBreaks]
);
};
sms.hasPermission = function(success, failure) {
// fire
exec(
success,
failure,
'Sms',
'has_permission', []
);
};
module.exports = sms;
});
И я хочу вызвать функцию sms.send(...) в моем коде Typescript.
Я пробовал импортировать такой файл:
import sms from '../../../plugins/cordova-sms-plugin/www/sms.js';
или же
import * as Sms from '../../../plugins/cordova-sms-plugin/www/sms.js';
или же
window['window']['sms']['send'](...)
но ничего не работает, ionic не находит функцию send(), не могли бы вы мне помочь, пожалуйста?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы звоните некорректно. В ваш файл ts не нужно импортировать файл js.
Либо вы можете вызвать напрямую, используя глобальную переменную области видимости, либо вы можете создать файл определения .d.ts для этого интерфейса плагина и импортировать его в свой файл .ts.
Убедившись, что ваш плагин установлен правильно, выполните следующие действия, чтобы вызвать cordova-sms-plugin из файла TS.
Шаг 1. Вы можете ссылаться на JS variable, используя windows object, поэтому объявите его в файле .ts
declare var window: any;
Шаг 2. Теперь можно называть это как window.sms.send
let phone: string;
//Set the value of phone
let message: string;
//Set the value of message
let options = {
"replaceLineBreaks: false"
//
};
//Call the function
window.sms.send(phone,message,options,(result: any) => {
console.info("SuccessFully Done...");
}, (err: any) => {
console.info("An error has occuered :" + err.code);
})
Я также нашел для вас образец проекта на GitHub, вы можете сослаться на него, чтобы изучить код:
https://github.com/abritopach/ionic-receiver-sms
Ваше приложение корректно работало без этого плагина?
Да, нет проблем, когда я не пытаюсь использовать этот плагин. (Я ответил ниже, чтобы добавить экран с ошибкой)
Можете ли вы показать свой код там, где вы вызываете плагин sms? вы можете поделиться им в любой онлайн-среде IDE
@ Nooby - вы можете сослаться на это для справки: github.com/abritopach/ionic-receiver-sms
Я пробовал вот так: ideone.com/YsAbiz, и у меня есть html-страница, которая вызывает функцию tryPlugin2 ().
Спасибо, я пробовал, но у меня ошибка: 07-13 13: 17: 34.643 30659-30659 / io.ionic.starter D / SystemWebChromeClient: ng: ///AppModule/PhotoPage.ngfactory.js: Строка 96: ОШИБКА 07- 13 13: 17: 34.643 30659-30659 / io.ionic.starter I / chromium: [ИНФОРМАЦИЯ: КОНСОЛЬ (96)] «ОШИБКА», источник: ng: ///AppModule/PhotoPage.ngfactory.js (96) 07- 13 13: 17: 34.646 30659-30659 / io.ionic.starter D / SystemWebChromeClient: ng: ///AppModule/PhotoPage.ngfactory.js: Строка 96: КОНТЕКСТ ОШИБКИ 07-13 13: 17: 34.646 30659-30659 / io .ionic.starter I / chromium: [ИНФОРМАЦИЯ: КОНСОЛЬ (96)] "КОНТЕКСТ ОШИБКИ", источник: ng: ///AppModule/PhotoPage.ngfactory.js (96)