【问题标题】:Is it possible to fire a keypress event for an iframe that has been used to load a PDF file是否可以为已用于加载 PDF 文件的 iframe 触发按键事件
【发布时间】:2012-11-09 11:42:35
【问题描述】:

我 99% 确定这是不可能的,但我会问一下,以防有人有想法。

一点背景:

我的用户使用条形码扫描仪将物品托运出系统。每个条形码都是一个 ID 号,前面有一个“^”(因此系统可以判断是否有人在扫描,而不仅仅是打字)。当他们扫描每个条形码时,页面会自动下载 PDF(到 iframe),该 PDF 打印在标签上并粘贴在盒子上。然后他们移动到下一个和下一个等等。

自动打印由附加到文档的onkeypress 事件处理。这是被调用的函数:-

function quickEntry() {
    if (String.fromCharCode(event.keyCode) == "^") {
        if (!scanning) {
            grn = '';
            scanning = true;
            setTimeout('addBarcode()', 1000);
        }
        else {
            alert("Still processing previous GRN.");
        }
    }
    else
        grn += String.fromCharCode(event.keyCode);
}

问题:

问题在于,在打印第一个标签后,即使窗口本身仍具有焦点,用户也需要单击主 html 文档的某个区域才能再次扫描条形码。

编辑

任何遇到此问题的人都可以查看this question 以获取更多最新答案。

【问题讨论】:

    标签: javascript html pdf


    【解决方案1】:

    我的猜测是窗口有焦点,但 input 元素失去焦点(焦点可能已移动到 iframe 或其中的某个元素)。

    To find out which element has stolen your focus, you can use document.activeElement 并更改其 CSS 样式以使其更加突出或使用 CSS 和 :focus 选择器。

    要解决您的问题,请使用 JavaScript 打印 iframe,然后将焦点重新放在 input 元素上。

    这可能涉及主页和iframe 之间的 JavaScript 调用;有answers on this site怎么做。

    [编辑] 有几种方法可以将 PDF 嵌入网页。当您使用iframe 时,PDF 插件将控制浏览器窗口(因此它可以响应键盘和鼠标事件)。

    尝试使用 <object> (pdfobject.com/markup/index.php) 加载 PDF,而不是使用 iframe

    【讨论】:

    • 这似乎不起作用。 iframe 不包含 html 文档(它包含打开的 pdf),因此无法在两个页面之间进行 javascript 通信。使用document.activeElement 告诉我一个适当的元素具有焦点(onkeypress 事件附加到文档而不是其中的任何特定元素)但是一旦加载了第一个 pdf,该事件就不会被触发。
    • 我担心嵌入式 PDF 查看器会抢走焦点 :-/ 你可以尝试使用 <object> (pdfobject.com/markup/index.php) 而不是使用 iframe 加载 PDF 吗?
    • 太棒了,将 PDF 放入对象中是关键!谢谢
    猜你喜欢
    • 2015-05-20
    • 2018-07-09
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多