iOS 8 Safari 打印重定向不会停止 javascript 执行

2024-01-29

我需要提供在成功保存时以及打印重定向到搜索页面后打印标签的能力。这适用于 chrome、firefox、ie、iOS 6/7 safari 等。但是,当从 javascript 发出 window.print() 时,iOS 8 似乎不再停止 javascript 的执行。

如果您导航到这个 jsfiddle 例子 http://jsfiddle.net/55bevo31/5/从 iOS 8 Safari(连接到计算机,以便您可以查看控制台日志)并单击“打印”按钮,您将看到打印对话框打开时将触发 console.log。因此,如果您想打印然后导航,您将打印错误的屏幕,除非您有足够的时间来进行打印,这在这种情况下是不可接受的延迟。

我做了一个人为的延迟,因为在 iOS 6/7 中,似乎让打印对话框最终停止了 javascript 的执行。在这种情况下,500 毫秒就足以使其工作。

有其他人在 Safari 中的 iOS 8 中执行类似操作时看到过此问题吗?他们是否引入了一个新事件来监听我可以用来执行此操作的事件?

// Example Code
window.print();
setTimeout(function() {
    console.log('This should print after the print is issued in the iOS print dialog.');
}, 500);

您可以使用window.matchMedia (链接 http://caniuse.com/#feat=matchmedia),结合window.onbeforeprint and window.onafterprint(用于早期的 IE 支持)。可以找到使用 matchMedia 的良好参考here http://tjvantoll.com/2012/06/15/detecting-print-requests-with-javascript/ and here https://stackoverflow.com/questions/3339789/onbeforeprint-and-onafterprint-equivalent-for-non-ie-browsers.

为满足使用matchMedia对于 iOS,使用嵌套事件。首先,监听要更改为的媒体类型print。然后,在该回调中,监听媒体更改回screen.

if (window.matchMedia) {
    var printQuery = window.matchMedia('print');
    printQuery.addListener(function() {
        var screenQuery = window.matchMedia('screen');
        screenQuery.addListener(function() {
            //actions after print dialog close here
        });
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 8 Safari 打印重定向不会停止 javascript 执行 的相关文章

  • 两个单独表格上的 Td 高度

    我有两个单独的表 我在每个 tr 上使用焦点 悬停函数 该函数同时在两个表上都很好用 我的问题是 td 高度 因为如果第一个表中 td 的描述更大 将显示在中的两行上相同的td和td的高度将被修改 但仅限于第一个表td 如何记住第一个表中
  • 解决错误 413 请求实体太大

    我正在从事的项目允许我们的员工将大文件上传到我们的共享主机并获取下载链接 问题是我们的托管拒绝更改共享托管的 LimitRequestBody 还有其他解决方案可以解决 LimitRequestBody 或任何其他方法来完成这项工作吗 有两
  • 继续使用 sketch.js 编辑草图图像 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在使用 sketch js 中的示例 http intridea github io sketch js http intridea g
  • 为什么电子邮件正文给出不同的输出?

    我正在尝试触发来自 Google 应用程序脚本的电子邮件 const body HtmlService createHtmlOutput A b new task b have been added to the Task Manager
  • 录制视频和音频并上传到服务器

    我想为网站添加视频录制功能 我一直在搜索并尝试所有可能的可用解决方案 但还没有任何工作正常 我已经尝试过以下解决方案 WebRTC 我知道使用 WebRTC 我们可以从网络摄像头和麦克风获取流 我发现了很多关于相同内容的文章 但没有一篇解释
  • 如何检查 webgl(two.js) 的客户端性能

    我有一个使用 Three JS 的图形项目 现在我想自动检查客户端 GPU 性能并计算可以在应用程序中加载多少元素 我想到了诸如 GPU 基准测试之类的东西 看一眼stats js https github com mrdoob stats
  • 替换字符以制作国际字母(变音符号)

    我正在尝试模仿国际键盘的工作方式 如果您使用其中之一死钥匙 http en wikipedia org wiki Dead key后面跟着一个字母 它将它们组合成相应的字符 例如 输入 a会导致 and o结果是 etc 我似乎无法让我的正
  • 使用 Javascript 在前端创建基本 URL(开发、API 和生产)

    无论开发和部署如何 如何制作适用于 http https localhost 端口和实际域的基本 url 我想创建一个可以在所有场景或条件下工作的基本 url 无论 http https 协议 端口 本地主机和实际域如何 无论是在开发中还是
  • Javascript 将即时生成的 BLOB 文件下载到特定文件夹中

    所以我正在尝试编写一个 Firefox Webextension 我想将网页的标题 网址和个人评论保存到文件中 myfile txt 这就是我得出的结论 我不希望我的 下载 文件夹很快变满 因此我想将它们下载到 下载 文件夹中包含的文件夹中
  • 正则表达式问题 - 在字符串中查找数字

    我目前正在使用 JavaScript 从字段中获取字符串 在该字段中通常会有 宽度 56 空隙 67 我需要做的是识别 1 440 范围内的两个数字 并将它们放入两个不同的字段中 字段 1 宽度 字段 2 无效 我已经研究过正则表达式 到目
  • “调用”C:\Program Files\nodejs\\node.exe”错误

    我一直在尝试安装节点js并安装浏览器同步 C Users Aly gt npm install g browser sync CALL C Program Files x86 nodejs node exe C Program Files
  • 在 GeoJson 数据接收到的 Google 地图多边形上放置标签

    我想将带有信息的标签 或带有标签的 div 放在由下面的代码片段绘制的多边形上 样式属性已成功应用于要素 多边形类型 有谁知道如何向该特征添加文本并将其显示在多边形的中心 function handleGeoJson data map da
  • 如何从客户端 JavaScript 调用特定的 Node.js 方法

    在我的应用程序中 我在 node js 文件中创建了许多方法 我如何从客户端 JavaScript 调用特定方法 下面是我的node js 文件 exports method1 function exports method2 functi
  • 让屏幕阅读器读取使用 JavaScript 添加的新内容

    加载网页时 屏幕阅读器 例如 OS X 中的屏幕阅读器或 Windows 上的 JAWS 中的屏幕阅读器 将读取整个页面的内容 但是假设您的页面是动态的 当用户执行操作时 新内容就会添加到页面中 为了简单起见 假设您在某个位置显示一条消息
  • Angularjs + Typescript,如何将 $routeParams 与 IRouteParamsService 一起使用

    我使用 routeParams 从 URI 中提取属性并为其设置本地变量 当我使用打字稿输入设置 route 参数的类型时 我无法再访问 route 参数 如何访问 routeParams 中的属性 class Controller con
  • 垂直滚动,与 div/元素/锚点对齐/对齐

    我发现了一些可爱的网站 http www mini jp event campaign big point http www mini jp event campaign big point http www twenty8twelve c
  • 如何检查令牌过期和注销用户?

    当用户单击注销按钮时 他 她可以自己注销 但是如果令牌过期 他 她就无法注销 因为在我的应用程序中 令牌在服务器端和前端都使用 当用户单击注销按钮时 如果令牌有效 则服务器和浏览器中的令牌都会被清除 当用户未注销并且他 她的令牌过期但未在浏
  • JavaScript - 替换 html 字符串中的特定单词索引

    我在 JS 字符串操作方面面临着一项具有挑战性的任务 有一个 HTML 字符串 我需要在其中替换特定单词索引处的单词 单词索引是忽略 HTML 标签时单词的编号 例如 下面是 HTML 字符串 span style font family
  • 根据唯一测试提取站点地图 URL 和 cy.request() 每个 URL (Cypress) [重复]

    这个问题在这里已经有答案了 将 Cypress 与 TypeScript 结合使用 我的代码目标是提取 sitemap xml 中的所有 URL 和 cy request 每个 URL 的状态 200 这个版本的工作原理 describe
  • AngularJS 中的全局模拟对象用于 jasmine/karma 测试

    我有一个正在模拟进行单元测试的对象 基本上在我的测试文件中 我将其模拟如下 var mockObject mockMethod1 function return true mockMethod2 function return true b

随机推荐

  • Java 游戏引擎 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我最近一直在研究游戏开发 我的第一个编程语言是 Java 在玩过许多用 C 开发的令人惊叹的游戏后 我想知道为什么 Java 在游戏行
  • 如何在Github上托管gem并使用它?

    我已将私有 gem 文件添加到新存储库中here https github com praveenitmec testgem但是当我尝试将它添加到我的 gem 文件中时 gem test gem git gt https github co
  • jQuery 禁用链接

    任何人都知道如何禁用 jquery 中的链接而不使用return false 具体来说 我想要做的是禁用某个项目的链接 使用 jquery 执行单击它会触发一些内容 然后重新启用该链接 以便再次单击它时它会默认工作 谢谢 戴夫 UPDATE
  • 有关 python ImportError 的更多信息,没有命名的模块

    遵循建议here https stackoverflow com questions 338768 python importerror no module named 我的包 或包含我的模块的目录 位于 C Python34 Lib si
  • 如何从 C# 导入和使用非托管 C++ 类?

    我有一个本机 C dll 一些头文件和导入库 有没有办法在 C 中实例化 dll 中定义的对象 我知道的两种方法是 将 C 代码包装到 COM 中 使用 DLLImport 和外部 C 函数 C CLI 是您的朋友 不过 您会遇到一个问题
  • Python 日志记录:传播低于当前记录器级别的消息

    我想记录特定记录器名称 特定级别及更高级别的消息 例如INFO及以上 到特定的日志处理程序 例如文件处理程序 同时仍然将所有日志消息发送到控制台 Python 的版本是 2 7 到目前为止我尝试的是创建两个记录器 根记录器 命名记录器 对于
  • 忽略来自 Google Closure 中一个文件的编译器警告

    我在一个相当大的 Closure 项目中使用外部库 Phonegap 不幸的是 Phonegap 生成了大量编译器警告 所有 危险使用 这足以让我在编译器输出中搜索有关我自己的代码的警告变得非常烦人 有没有一种方法可以仅消除一个文件中的警告
  • 每当使用除法时,C 程序中的计算结果总是为 0

    我使用两个不同的变量来除以来自的变量int and double 当我使用类似以下内容时 这些工作正常 int cost cost 40 cost cost 400 20 2 为此 该方法工作正常 我得到了正确的结果 即4 但是当我使用变量
  • 常见 C++ 优化技术列表 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的
  • 仅针对特定服务的拦截器

    我的应用程序中有多个指向不同 API URL 的服务 现在我需要为每个服务设置不同的标头 我现在的问题是关于 Angular 4 中的新拦截器 是否可以为特定服务设置一个拦截器 那么每个服务都有其特定的拦截器 希望你们能明白我的问题 TL
  • 删除填充或强制拟合或删除方形矢量资源中的空白空间以适合矩形按钮?

    我正在尝试调整all inclusive svg 图像 https material io resources icons icon all inclusive到我的矩形按钮 形状本身也是矩形 但矢量资源是正方形 24x24 形状上方和下方
  • 如何将所需的验证器添加到ajax AsyncFileUpload?

    如何将客户端所需的验证器添加到 asyncfileupload 以强制用户在提交页面之前选择文件 您还可以使用 C 或 VB 而不是客户端 Javascript 或 JQuery 函数 在服务器端方法中设置隐藏文本框的文本 protecte
  • python eval 函数中的 \r\n 与 \n

    为什么 eval 函数不能与 r n 一起使用 而可以与 n 一起使用 例如 eval for i in range 5 r n print hello 不起作用 eval for i in range 5 n print hello 有效
  • java中的package语句有什么理由应该放在开头吗?

    我从 Java 编程语言开始 我有一个简单的问题 在 java 包中 如果类是包的一部分 则 package 语句必须位于源代码文件中的第一行 位于可能存在的任何 import 语句之前 包声明应该放在开头有什么有价值的理由吗 有理由吗 当
  • 使用elasticsearch-river-mysql将数据从MySQL数据库流式传输到Elasticsearch

    我想用Elasticsearch 河 mysql https github com scharron elasticsearch river mysql以便不断地将数据从 MySQL 数据库传输到 ElasticSearch 我是 ES 和
  • 检查函数是否属于/哪个工具箱

    我们的工作站上安装了一个相对 丰富 的matlab 我现在需要发送一些代码到 并且我想检查它需要哪些工具箱才能正常工作 最简单的方法是什么 如何找出某个功能属于哪个工具箱 我看到两个问题 我要发送的函数需要哪些工具箱 你需要生成一个依赖性报
  • STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置

    我正在使用 Django 1 7 将我的网站部署到生产服务器并运行时collectstatic 我收到以下错误消息 django core exceptions ImproperlyConfigured STATICFILES DIRS 设
  • 将反应本机升级到最新版本

    我有一个在react native 0 49 3 上运行的应用程序 我想升级到最新版本 v0 57 4 我应该逐步更新它吗 例如 0 49 gt 0 50 gt 0 51 等 或者我可以直接更新到最新版本吗 你建议使用react nativ
  • 委托和谓词查询

    我正在学习 lambda 并试图理解为什么 同时拥有 EmployeeFilterAge 类 如下所示 public class EmployeeFilterAge int age public EmployeeFilterAge int
  • iOS 8 Safari 打印重定向不会停止 javascript 执行

    我需要提供在成功保存时以及打印重定向到搜索页面后打印标签的能力 这适用于 chrome firefox ie iOS 6 7 safari 等 但是 当从 javascript 发出 window print 时 iOS 8 似乎不再停止