在iPad上打印FullCalendar



我已经断断续续地完成这项任务一段时间了,试图找到一个最佳解决方案(除了告诉用户禁用弹出窗口阻止),但我被难住了。

本质上它是如何工作的(我省略了代码,因为有很多它和适当的信息):

我有一个在angular中实现的angular应用程序,它利用了我想要打印的内容fullcalendar.js。在我的角度控制器里,我有管理日历本身的jQuery(请不要用尺子打我的手指:)

当我想打印日历时,我想要一组特定的样式,所以我有一个指令来准备要移植的所有内容,然后使用用于所有打印活动的统一角度工厂。这个统一工厂打开了一个新窗口,其中包含我想要的所有新样式,并通过回调"清理"HTML,在我的情况下,我使用它将日历的HTML内容移植到新窗口。

所以流程基本是这样的:用户点击打印按钮->调用日历打印指令中的点击事件,指令调用工厂。->Factory打开一个新窗口,并通过指令的回调来移植内容,然后调用JavaScript的print()来打印窗口。

我遇到的问题是:打印在PC和Mac上运行良好,但在iOS safari上,窗口不会弹出。我发现这个问题是因为iOS Safari要求所有新窗口弹出窗口都在点击事件中。

为了解决这个问题,我想我会对统一工厂添加一些修改,以适应我的情况:我会在指令的点击事件中打开一个新窗口,然后将该窗口的引用传递到工厂,工厂可以使用该引用将html内容添加到其主体中。这给iOS Safari带来了另一个问题,即如果子窗口打开,它会暂停父窗口的javascript执行,因此一旦打开新窗口,HTML的生成和工厂的调用就会暂停,直到用户切换回父选项卡。这就是我被难住的地方。有什么解决这些问题的建议吗?或者我会一直告诉用户禁用弹出窗口阻止吗?

打开新窗口后,HTML和工厂的电话被叫停了。。。

你能更改吗,以便在打开新窗口之前生成HTML和工厂调用?否则,听起来你需要避免弹出窗口。

如果要在同一窗口中显示另一个视图,请使用ngInclude。您可以选择切换ngInclude的路径以交换HTML,或者与ngShow组合以在用户单击时显示和隐藏正确的部分。

听起来像是将工厂用作父作用域,如果是这样,则应将其转换为控制器,作为不同视图上方的全局作用域。

如果这是在正确的轨道上,我可以做一个砰的一声。

此外,如果您想寻求最佳实践,请查看完整的日历ui以获取预制指令。

祝你好运!

在一个月的时间里,我经历了大约3次,终于明白了。

在准备打印内容的指令中,我生成了一个新的日历,然后在文档中调用其余的代码(包括打开新窗口的工厂)。就绪。将代码置于就绪复选框中似乎会导致iOS Safari认为它不再直接位于点击事件中,因此有时会阻止新窗口弹出。删除document.ready检查似乎已经使其工作,并且对其他浏览器没有不良影响。

我决定在指令中为工厂调用创建一个函数,并在文档中调用。如果不是iOS,请准备,否则只调用它,以保留桌面浏览器的功能。

相关内容

  • 没有找到相关文章

最新更新