我正在创建一个Chrome应用程序。我必须使用Angular.js打印模态弹出窗口的DIV内容。在HTML页面上,它工作正常,但是在Chrome App中,document.open()
和document.write()
不起作用。等待最佳结果?请在下面找到代码。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<link href="https://cdn.healthscion.com/Zureka/compressfile/css/bootstrap.min.css.jgz" rel="stylesheet" type="text/css" />
<script src="https://cdn.healthscion.com/Zureka/compressfile/scripts/jquery-2.1.1.min.js.jgz" type="text/javascript"></script>
<script src="https://cdn.healthscion.com/Zureka/compressfile/scripts/bootstrap.min.js.jgz" type="text/javascript"></script>
<script src="https://cdn.healthscion.com/Scripts/angular1.2.25.min.js"></script>
</head>
<body>
<div data-ng-app="UnitApp" data-ng-controller="UnitController">
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg onPrint" data-toggle="modal" data-target="#myModal">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
<div ng-repeat="model in friends track by model.id">
My Friends Name Is: {{model.name}}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-ng-click="onClear()">Close</button>
<button type="button" class="btn btn-primary onPrint" data-ng-click="onprint()">Print Code</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
<script>
var UnitApp = angular.module("UnitApp", []);
UnitApp.service("UnitAppservice", function ($http) {
});
UnitApp.controller("UnitController", function ($scope, $compile, UnitAppservice) {
var _ = $scope;
_.friends = [
{ name: 'John', id: 1 },
{ name: 'Jessie', id: 2 },
{ name: 'Johanna', id: 3 },
{ name: 'Joy', id: 4 }
];
_.onprint = function () {
debugger
$('.onPrint').css('display', 'none');
var contents = document.getElementById("myModal").innerHTML;
var frame1 = document.createElement('iframe');
frame1.name = "frame1";
frame1.style.position = "absolute";
frame1.style.top = "-1000000px";
document.body.appendChild(frame1);
var frameDoc = frame1.contentWindow ? frame1.contentWindow : frame1.contentDocument.document ? frame1.contentDocument.document : frame1.contentDocument;
frameDoc.document.open();
frameDoc.document.write('<html><head><title>DIV Contents</title>');
frameDoc.document.write('</head><body>');
frameDoc.document.write(contents);
frameDoc.document.write('</body></html>');
frameDoc.document.close();
window.print();
}
_.onClear = function () {
$('#myModal').modal('hide');
$('.onPrint').css('display', 'inline-block');
}
});
</script>
在不使用 UI Bootstrap
的情况下更新了解决方案使用@Media打印在打印时更改设计。
检查下面的演示: -
(function () {
'use strict';
var UnitApp = angular.module("UnitApp", []);
UnitApp.controller("UnitController", function ($scope) {
$scope.friends = [
{ name: 'John', id: 1 },
{ name: 'Jessie', id: 2 },
{ name: 'Johanna', id: 3 },
{ name: 'Joy', id: 4 }
];
$scope.onprint = function () {
window.print();
}
});
})();
<!doctype html>
<html>
<head>
<title>Test</title>
<!-- Included here because the External Resources panel is annoying to use -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript -->
<link href="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.3/angular-material.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-animate.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-aria.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.9/angular-messages.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angular_material/1.0.3/angular-material.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<style>
@media print {
body * {
visibility: hidden;
}
.print-content * {
visibility: visible;
overflow: visible;
}
#mainPage * {
display: none;
}
.modal {
position: absolute;
left: 0;
top: 0;
margin: 0;
padding: 0;
min-height: 550px;
visibility: visible;
/**Remove scrollbar for printing.**/
overflow: visible !important;
}
.modal-dialog {
visibility: visible !important;
/**Remove scrollbar for printing.**/
overflow: visible !important;
}
li {
page-break-after: auto;
}
.onPrint {
display:none;
}
}
</style>
</head>
<body ng-app="UnitApp">
<div ng-controller="UnitController">
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg onPrint" data-toggle="modal" data-target="#myModal">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog print-content" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close onPrint" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
<div ng-repeat="model in friends track by model.id">
My Friends Name Is: {{model.name}}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default onPrint" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary onPrint" data-ng-click="onprint()">Print Code</button>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
请在下面找到工作演示
使用了UI Bootstrap模态弹出窗口,该弹出窗口使用了角度的控件。
angular.module('ui.bootstrap.demo', ['ngAnimate', 'ui.bootstrap']);
angular.module('ui.bootstrap.demo').controller('ModalDemoCtrl', function ($scope, $uibModal, $log) {
$scope.animationsEnabled = true;
$scope.friends = [
{ name: 'John', id: 1 },
{ name: 'Jessie', id: 2 },
{ name: 'Johanna', id: 3 },
{ name: 'Joy', id: 4 }
];
$scope.print = function () {
window.print();
}
$scope.open = function (size) {
var modalInstance = $uibModal.open({
animation: $scope.animationsEnabled,
templateUrl: 'myModalContent.html',
controller: 'ModalInstanceCtrl',
size: size,
resolve: {
items: function () {
return $scope.friends;
}
}
});
modalInstance.result.then(function () {
}, function () {
$log.info('Modal dismissed at: ' + new Date());
});
};
});
// Please note that $modalInstance represents a modal window (instance) dependency.
// It is not the same as the $uibModal service used above.
angular.module('ui.bootstrap.demo').controller('ModalInstanceCtrl', function ($scope, $modalInstance, items) {
$scope.friends = items;
$scope.print = function () {
window.print();
}
$scope.ok = function () {
$modalInstance.close();
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
});
/**Modal Styles for Print**/
@media print {
body * {
visibility: hidden;
}
#print-content * {
visibility: visible;
overflow: visible;
}
#mainPage * {
display: none;
}
.modal {
position: absolute;
left: 0;
top: 0;
margin: 0;
padding: 0;
min-height: 550px;
visibility: visible;
/**Remove scrollbar for printing.**/
overflow: visible !important;
}
.modal-dialog {
visibility: visible !important;
/**Remove scrollbar for printing.**/
overflow: visible !important;
}
li {
page-break-after: auto;
}
}
<!doctype html>
<html ng-app="ui.bootstrap.demo">
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-animate.js"></script>
<script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.14.2.js"></script>
<script src="example.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div ng-controller="ModalDemoCtrl">
<script type="text/ng-template" id="myModalContent.html">
<div id="print-content">
<div class="modal-header">
<button type="button" class="close" ng-click="$dismiss()" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
<div class="modal-body">
<div ng-repeat="model in friends track by model.id">
My Friends Name Is: {{model.name}}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" ng-click="$dismiss()" data-ng-click="onClear()">Close</button>
<button class="btn btn-primary pull-right" ng-click="print()">Print</button>
</div>
</div>
</div>
</script>
<div id="mainPage">
<button type="button" class="btn btn-primary" ng-click="open('lg')">Launch demo modal</button>
</div>
</div>
</body>
</html>