- 浏览: 1091944 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (290)
- php (65)
- javascript (36)
- html5 (31)
- thinkphp (9)
- mysql (16)
- jquery (13)
- node.js (9)
- css (9)
- android 开发 (8)
- flex (5)
- java (3)
- apache (8)
- linux (8)
- git (5)
- web (5)
- wordpress (9)
- mongodb (2)
- redis (5)
- yaf (6)
- python (4)
- big data (1)
- sphinx (1)
- html (1)
- bootstrap (1)
- vue (1)
- laravel (1)
- test (0)
最新评论
-
July01:
推荐用StratoIO打印控件,支持网页、URL、图片、PD、 ...
如何解决非IE浏览器的web打印 -
flashbehappy:
同一个视频,有mp4,ogg两种格式的。在chrome,fir ...
firefox chrom safari 对video标签的区别 -
xmdxzyf:
可以在网站(www.sosoapi.com)上试下在线表单方式 ...
用swagger-php/ui做API测试 -
flex_莫冲:
a2631500 写道"看了源码,设置Backbon ...
backbone与php交互 -
a2631500:
"看了源码,设置Backbone.emulateJS ...
backbone与php交互
以前在IE下用window.print实现打印由于有active等IE特性的强大功能,打印都比较简单。但是在FF,SAFARI,CHROME,以及MAC操作系统下用js实现打印会出现很多莫名其妙的问题。
1 预览和真实打印效果不同。
在不同操作系统不同浏览器及版本下,这是很正常的。以最终目标打印结果为标准。
2 多页打印的排版错位。
采用table动态生成tr td内容项拼凑出打印内容,但是这种效果即使预览OK了打印出来都可能是错位的。放弃这种做法。
3 连续打印会出现空白页。
连续打印即动态更新打印内容,(排版固定)将新的内容替换旧的内容再依次循环执行window.print。
出现空白页的原因是没有设置page-break-before和page-breake-after为avolid。
4 将web程序嵌入MAC XCOED程序的配置问题。
将MAC下的XCODE程序嵌入web应用,并配置打印设置的配置文件:
#import "mainView.h"
@implementation mainView
@synthesize cursorArea;
- (IBAction)reloadHome:(NSButton *)sender {
[[mainWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://access.nmg.com.hk/"]]];
}
-(void)awakeFromNib{
[backGroundView setEnabled:TRUE];
//[mainWebView initWithFrame:[[NSScreen mainScreen]frame]];
[mainWebView autoresizesSubviews];
[mainWebView setFrameLoadDelegate:self];
[mainWebView setPolicyDelegate:self];
[mainWebView setUIDelegate:self];
[mainWebView setEditable:FALSE];
[[mainWebView preferences] setJavaEnabled:TRUE];
[[mainWebView preferences] setJavaScriptEnabled:TRUE];
[[mainWebView preferences] setPlugInsEnabled:TRUE];
[[mainWebView preferences] setUsesPageCache:TRUE];
[[mainWebView preferences] setJavaScriptCanOpenWindowsAutomatically:TRUE];
[[mainWebView preferences] setAllowsAnimatedImages:TRUE];
[[mainWebView preferences] setAllowsAnimatedImageLooping:TRUE];
[[mainWebView preferences] setLoadsImagesAutomatically:TRUE];
[[mainWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://access.nmg.com.hk/"]]];
//cursorArea = [[NSTrackingArea alloc] initWithRect:NSMakeRect(0, 0, [[NSScreen mainScreen] frame].size.width, 3) options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
//[self addTrackingArea:cursorArea];
}
-(void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message
{
NSAlert *alert = [NSAlert alertWithMessageText:nil
defaultButton:@"OK"
alternateButton:nil
otherButton:nil
informativeTextWithFormat:@"%@",message
];
[alert setAlertStyle:NSWarningAlertStyle];
[alert beginSheetModalForWindow:[sender window]
modalDelegate:self
didEndSelector:@selector(endAlert)
contextInfo:nil];
}
-(void)endAlert
{
NSLog(@"end");
}
- (void)moveTrackingAreaup {
[super updateTrackingAreas];
[self removeTrackingArea:cursorArea];
cursorArea = [[NSTrackingArea alloc] initWithRect:NSMakeRect(0, 0, [[NSScreen mainScreen] frame].size.width, 60) options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
[self addTrackingArea:cursorArea];
}
-(void)moveTrackingAreadown{
[super updateTrackingAreas];
[self removeTrackingArea:cursorArea];
cursorArea = [[NSTrackingArea alloc] initWithRect:NSMakeRect(0, 0, [[NSScreen mainScreen] frame].size.width, 3) options: (NSTrackingMouseEnteredAndExited | NSTrackingActiveAlways) owner:self userInfo:nil];
[self addTrackingArea:cursorArea];
}
/*- (void)mouseEntered:(NSEvent *)event
{
[[mainWebView animator] setFrameOrigin:NSMakePoint([mainWebView frame].origin.x,60)];
[[buttonControlView animator] setAlphaValue:1];
//if ([backGroundView isEnabled] == FALSE) {
// [backGroundView setEnabled:TRUE];
// }
[self performSelector:@selector(moveTrackingAreaup)];
}*/
-(void)hideFunction{
if ([backGroundView isEnabled] == TRUE) {
[backGroundView setEnabled:FALSE];
}
}
/*- (void)mouseExited:(NSEvent *)event{
[self performSelector:@selector(moveTrackingAreadown)];
[[mainWebView animator] setFrameOrigin:NSMakePoint([[NSScreen mainScreen] frame].origin.x,[[NSScreen mainScreen] frame].origin.y)];
[[buttonControlView animator] setAlphaValue:0];
// [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(hideFunction) userInfo:nil repeats:NO];
}*/
//-(void)dealloc{
// [super dealloc];
//}
#pragma mark - WebUIDelegate
- (void)webView:(WebView *)sender printFrameView:(WebFrameView *)frameView
{
if ([frameView documentViewShouldHandlePrint]) {
[frameView printDocumentView];
} else {
NSPrintInfo *printInfo;
NSPrintOperation *printOp;
NSMutableDictionary *printInfoDict;
printInfoDict = [NSMutableDictionary dictionaryWithDictionary:
[[NSPrintInfo sharedPrintInfo] dictionary]];
[printInfoDict setObject:NSPrintSpoolJob forKey:NSPrintJobDisposition];
printInfo = [[NSPrintInfo alloc] initWithDictionary: printInfoDict];
// [printInfo setHorizontalPagination: NSFitPagination];
// [printInfo setVerticalPagination: NSFitPagination];
[printInfo setHorizontalPagination: NSClipPagination];
[printInfo setVerticalPagination: NSClipPagination];
// [printInfo setVerticallyCentered:NO];
[printInfo setOrientation:NSLandscapeOrientation];
[printInfo setLeftMargin:-5];
[printInfo setTopMargin:0];
[printInfo setRightMargin:0];
[printInfo setBottomMargin:-30];
[printInfo setPaperSize:NSMakeSize(120, 240)];
[printInfo setScalingFactor:1];
printOp = [NSPrintOperation printOperationWithView:[frameView documentView]
printInfo:printInfo];
[printOp setShowsPrintPanel:NO];
[printOp runOperation];
}
}
@end
5 内容采用下拉框(动态显示)和直接显示(静态)的打印效果不同
采用下拉框动态显示会出现如果打多页第一页就是空白页。而静态不会。(后来证实,只有6页以上才不会,2-5页都会有空白页)。同样是page-breake的问题。
6 显示打印内容隐藏不打印内容
发表评论
-
使用BOOTSTRAP创建没有遮罩的可移动dialog
2017-01-16 12:00 1697bootstrap是个很流行的前端工具。我想做个没有遮罩的di ... -
富文本编辑器推荐
2016-10-26 16:03 2452website: https://www.froala.com ... -
一些比较特别的js库和框架
2016-08-11 14:05 638http://www.meedee.cn/2016/06/07 ... -
Javascript的变量与delete操作符
2016-08-11 14:02 461来自:http://www.meedee.cn/2 ... -
uploadifive上傳插件的使用
2015-02-17 18:07 31601 自定義上傳錯誤/進度提示位置 'queueID':&quo ... -
json schema validate
2014-09-17 16:58 4680为了检测API返回的数据结构是否正确,刚好chrome的插件p ... -
来自yahoo的web优化规则(YSLOW的23条军规)
2014-09-11 17:53 1673https://developer.yahoo.com/per ... -
<a>的href中添加js函数的写法
2014-03-18 15:54 1261参考资料: http://www.cnblogs.com/op ... -
使用backbonejs的router功能
2014-01-02 12:13 966来源: http://css.dzone.com/articl ... -
初次seajs使用
2013-11-22 14:11 2989第一次用报了$=null的错 ... -
Javascript:history.go()和history.back()的用法和区别
2013-08-02 14:38 37624Javascript:history.go()和history ... -
JAVASCRIPT常用函数集合
2013-07-23 15:01 9611、删除数组某项 // Array Remove - By ... -
JS判断一个数组中是否有重复值的三种方法
2013-07-18 09:52 2247参考 http://superivan.iteye.com/b ... -
多DOM操作的性能优化
2013-07-15 17:32 993今天发现DOM操作很多,且是显示隐藏操作,性能是非常差的。一个 ... -
SafariJSRef safary开发指南
2013-07-10 11:30 929针对safari的js和css开发指南。 https://de ... -
js获取屏幕可视区域
2013-06-04 11:10 1001IE: document.body.offsetWidth, ... -
backbone 的delegateEvent用法
2013-05-24 10:37 4655這篇文章記錄關於 Backbone delegateEvent ... -
post的数据参数内容包含&如何如何处理
2013-01-17 23:37 2566这星期测试人员提交了一个bug,表单保存的数据不完整。查了一下 ... -
javascript 同zindex的重叠div如何处理事件关系
2012-11-15 11:43 6521在一个页面中有3个独立的div,不存在嵌套层次关系。3个div ... -
jquery easyui 操作总结
2012-10-29 12:32 288901、dialog $("#dialog-form& ...
相关推荐
`window.print()` 是JavaScript中的一个内置方法,它可以帮助我们轻松实现这个需求。本篇将详细介绍如何利用HTML和JavaScript通过`window.print()`来实现这一功能。 首先,`window.print()` 方法是JavaScript中的一...
根据提供的文件信息,我们可以推断出本文主要讨论的是关于网页打印功能的相关知识点,特别是如何使用JavaScript中的`window.print()`方法来实现网页内容的打印,并且提到了如何利用`onbeforeprint`与`onafterprint`...
`window.print()` 是JavaScript中的一个内置函数,它用于触发浏览器的打印对话框,让用户可以选择打印网页内容。在这个主题下,我们将深入探讨`window.print()`分页打印的相关知识点,以及如何通过`printTest.html`...
打印时去除页眉页页脚 打印前加入下面代码即可 var HKEY_Root,HKEY_Path,HKEY_Key; 代码如下: HKEY_Root=”HKEY_CURRENT_USER”; HKEY_Path=”\\Software\\Microsoft\\Internet Explorer\\PageSetup\\”; var head,...
`window.print()` 是JavaScript中一个非常实用的函数,用于触发浏览器的打印对话框,让用户可以选择打印当前页面或部分内容。本文将详细介绍如何使用`window.print()` 实现Web打印,并提供示例代码帮助理解。 1. **...
本文将详细介绍如何解决IE11不支持`window.attachEvent`的问题,并提供具体的解决方案。 #### 1. 了解`attachEvent`与`addEventListener` 首先,我们需要理解`attachEvent`与`addEventListener`的区别。`...
在实际应用中,window.name 传输技术可以用于解决跨域数据传输问题,例如在社交媒体平台上分享数据、在不同的域名之间传输数据等等。同时,也可以用于解决 Cookie 的一些劣势,例如 Cookie 的大小限制、数据类型限制...
`window.print()`方法是JavaScript中的一个内置方法,主要用于在用户浏览器上打开打印对话框,让用户可以选择打印网页内容。这个方法非常实用,尤其对于那些需要提供打印功能的网站来说,如在线文档、报告或者表格等...
### window.location.href页面跳转的用法(区别于redirect) #### 概述 在Web开发过程中,页面跳转是一项常见的需求。通常我们会使用`Response.Redirect`来进行页面跳转,但这种方式无法在跳转前执行客户端脚本...
火狐浏览器不支持window.event的解决办法,解决不同浏览器针对window.event的差异
根据提供的文件信息,我们可以深入探讨`window.open()`方法在不同浏览器环境下的特性和使用细节。 ### window.open() 方法概述 `window.open()`是JavaScript中一个非常实用的方法,它用于在一个新的浏览器窗口或...
- **window.open** 更适合用于打开新的浏览器窗口或标签页,特别是在需要弹出新窗口的情况下。 #### 五、安全性和隐私考虑 - 使用 `window.open` 打开新窗口可能会触发浏览器的安全策略,尤其是当涉及到跨域请求时...
`window.print()` 是JavaScript中的一个方法,它用于打开浏览器的打印对话框,从而让用户选择打印当前网页。但是,这个方法默认会打印整个页面,包括用户可能不希望打印的导航、侧边栏或者其他元素。在这种情况下,...
`window.print()` 是JavaScript中的一个内置函数,用于打开浏览器的打印对话框,让用户选择打印当前网页。但是,它默认会打印整个网页的所有内容。在本文中,我们将探讨如何利用 `window.print()` 结合其他技术来...
`window.showModalDialog` 和 `window.open` 都是JavaScript提供的两种打开新窗口的方法,但它们在功能和使用场景上有着显著的区别。 首先,我们来详细探讨`window.showModalDialog`。`showModalDialog`方法用于...
调用浏览器自带打印功能,使用JavaScript的 window.print(); 方法。 使用JS实现打印功能;JavaScript 实现打印操作;javascript打印大全;通用;js实现打印的方式;JS怎么实现页面打印呢?JavaScript 实现打印,打印...
这可以用来在页面间传递数据,特别是在`window.open()`的场景下。 ```javascript // 设置窗口名字 window.name = 'myUniqueName'; // 之后可以通过这个名字获取到该窗口 var newWindow = window.open('', '...