На момент написания этой статьи PrintPlugin из репозитория GitHub предназначен для Cordova 1.5. Если вы получите эту версию и внесете следующие изменения, вы сможете скомпилировать проект Cordova 2.0.
ВНИМАНИЕ: я обнаружил ошибку во всем этом плагине, связанную с печатью более одной страницы. Я обнаружил, что это связано с отсутствием логики ожидания завершения загрузки webView перед печатью. В настоящее время я работаю над новой версией этого плагина, чтобы разрешить настраиваемые заголовки, нумерацию страниц и т. д. Но пока..... ;)
В текущем файле .m репозитория он имеет следующее объявление функции:
- (void) print:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options{
NSUInteger argc = [arguments count];
if (argc < 1) {
return;
}
self.printHTML = [arguments objectAtIndex:0];
... << snipped />> ...
[self doPrint];
}
За этим следует отдельная функция doPrint.
- (void) doPrint{
if (![self isPrintServiceAvailable]){
[self callbackWithFuntion:self.failCallback withData: @"{success: false, available: false}"];
return;
}
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
if (!controller){
return;
}
... << snipped (cut and paste to below) />> ...
}
Я обновил свою локальную копию и объединил их в одну функцию, а также использовал другой механизм для получения аргументов. Ниже приведено мое объявление функции .m:
- (void) print:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options
{
// NSUInteger argc = [arguments count];
NSString* printHTML = [options valueForKey:@"printHTML"];
NSString* successCallback = [options valueForKey:@"success"];
NSString* failCallback = [options valueForKey:@"fail"];
NSString* dialogLeftPos = [options valueForKey:@"dialogLeftPos"];
NSString* dialogTopPos = [options valueForKey:@"dialogTopPos"];
UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
if (!controller){
return;
}
... << snipped (paste the rest from your original block here />> ...
}
Затем я также изменил .JS, чтобы создать объект, а не просто список параметров.
Текущий репозиторий PrintPlugin.js имеет:
return Cordova.exec("PrintPlugin.print", printHTML, callbackPrefix + '.success', callbackPrefix + '.fail', dialogLeftPos, dialogTopPos);
return Cordova.exec("PrintPlugin.print", printHTML, callbackPrefix + '.success', callbackPrefix + '.fail', dialogLeftPos, dialogTopPos);
Я изменил это на следующее:
var args = {
'printHTML': printHTML,
'success': callbackPrefix + '.success',
'fail': callbackPrefix + '.fail',
'dialogLeftPos': dialogLeftPos,
'dialogTopPos': dialogTopPos
};
cordova.exec(null, null, "PrintPlugin", "print", [args]);
Теперь может оказаться, что я мог просто поменять корпус в кордове на кордову, но это чисто задним числом. В любом случае, я надеюсь, что это поможет!
person
Mark Brown
schedule
11.10.2012