jSignature签名组件后退失效(html5)

我通过js静止后退,有时还是出现问题
测试连接地址
https://www.lovext.org/mobiles/stutestw
点击题目,然后答题,进入页面,应用场景是在线默写词语。
我现在是禁止了后退,jSignature签名组件有时失效,产生冲突,这个bug。
但是我是默写程序,必须要静止后退,不然就可以偷看了,求怎么合理静止后退,又可以正常使用jSignature组件。
求大圣解决,追加问题,电脑上测试没有问题哦,就是手机上测试有问题,单问题也不是一上来就有的,要重复几次才有,重复几次手写内容,在滑动向左,向右返回,最后手写就是横有问题,撇捺好像没有问题,总感觉和系统的返回事件冲突,但解决思路没有,不知道怎么办了

使用浏览器的历史记录管理来控制后退行为。
当用户点击后退按钮时,可以拦截该事件,并根据需要执行自定义操作。

很抱歉听到你的问题。根据你的描述,你使用了JavaScript来禁止后退,并且在使用jSignature签名组件时遇到了问题。这可能是因为你的后退禁用逻辑与jSignature的功能产生了冲突。

在处理这个问题之前,我们需要先了解你是如何禁用后退功能的。通常,可以使用以下方法之一来禁用后退功能:

  1. 使用history.pushState()或history.replaceState()方法修改浏览器历史记录。
  2. 使用window.addEventListener("popstate", function(event) {...})来拦截浏览器的后退事件。
  3. 使用window.history.forward()方法将浏览器强制前进一个页面而不是后退。

请确保你已仔细检查并正确实现了禁用后退的逻辑。如果你能提供你的相关代码,我可以帮你检查是否存在潜在的问题。

此外,关于jSignature签名组件失效的问题,可能有多种原因。可能是由于与禁用后退逻辑的冲突,也可能是其他原因,例如组件本身的bug或其他Javascript代码的冲突。为了找出问题所在,可以尝试以下几点:

  1. 确保jSignature的依赖项(如jQuery)已正确引入,并且没有引入其他版本的相同库。
  2. 检查浏览器控制台是否有任何错误消息或警告。这些消息可能会指示出问题的原因。
  3. 尝试在不禁用后退的情况下运行页面,看是否能正常使用jSignature组件。如果问题仅在禁用后退时出现,那么可以尝试重新评估你的后退禁用逻辑。

最后,如果以上方法仍无法解决问题,你可以考虑寻求专业开发人员或jSignature组件的支持来获取更详细的帮助和调试。

祝你好运,希望你能解决这个问题!望采纳!感谢!

这篇文章可以看一下,里面说的很详细了:


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢


function goBack() {
  window.history.back();
}

参考结合GPT4.0、文心一言,如有帮助,恭请采纳。

分析原因1、浏览器历史记录,当你禁止了后退操作时,浏览器的历史记录可能会受到影响。请确保你的代码没有禁用浏览器的历史记录功能,以便 jSignature 签名组件可以正常工作
原因2:页面刷新,如果在页面刷新时禁止了后退操作,可能会导致 jSignature 签名组件失效。请检查你的代码,确保在页面刷新后允许后退操作。
原因3:浏览器缓存,浏览器缓存可能会影响 jSignature 签名组件的可靠性。请尝试清除浏览器缓存或禁用缓存,重新尝试下

参考gpt:
结合自己分析给你如下建议:
一个可能的原因是,你使用了 jSignature.min.noconflict.js 这个文件,而不是 jSignature.min.js 这个文件。这个文件是为了避免和其他库冲突而设计的,但是它也会导致 jSignature 函数无法被 jQuery 识别。你可以尝试换成 jSignature.min.js 这个文件,或者使用 jq_1_12 (#id).jSignature (); 这样的写法来调用 jSignature 函数。
另一个可能的原因是,你的 jQuery 版本和 jSignature 版本不兼容。jSignature 的官方文档 建议使用 jQuery 1.4.2 或更高版本,但是有些用户反馈说 jQuery 3.x 版本会出现问题。你可以尝试降低你的 jQuery 版本,或者使用两个不同版本的 jQuery,并用 $.noConflict (true) 来避免冲突。
还有一个可能的原因是,你的页面中有其他的 JS 代码或插件影响了 jSignature 的正常工作。你可以尝试在一个干净的页面中只引入 jSignature 相关的文件,看看是否能正常运行。如果可以,那么你需要检查一下你的其他代码或插件是否有错误或冲突。

根据你提供的测试链接,我发现你的页面使用了jSignature的默认设置,没有对签名组件进行任何自定义。这可能导致一些问题,比如:
签名组件的大小和位置不合适,导致用户在绘制签名时不方便或不清晰。
签名组件没有设置合理的边框或背景色,导致用户在绘制签名时不易区分画布和页面的其他元素。
签名组件没有设置合理的笔触颜色或宽度,导致用户在绘制签名时不易看到自己的笔迹。
签名组件没有设置合理的压力感应或平滑度,导致用户在绘制签名时不易控制笔迹的粗细或曲线。
签名组件没有设置合理的事件监听或回调函数,导致用户在绘制签名时不易获取或处理签名数据。

谢谢大家的回复,我昨天发现就是和静止后退代码冲突了,但是我必须静止后退,我的是在线默写,如果可以后退的话就可以偷看了。
https://www.lovext.org/mobiles/stutestw
点击答题,进入页面,应用场景是在线默写词语。
那么应该怎么样静止后退,又可以正常使用 jSignature 签名组件呢,请教大圣了


```javascript
//禁止后退 有问题和jSignature签名产生冲突
function stopback(){
    if(window.history && window.history.pushState) {
        window.onpopstate=function () {
                window.history.pushState('forward', null, '');
                window.history.forward(1);
        };
    }
    window.history.pushState('forward', null, '');//在IE中必须得有这两行
    window.history.forward(1);
}


```

如果在使用 jSignature 签名组件时,后退按钮(或其他导航按钮)失效,可能是因为签名组件捕获了导航事件并阻止了默认行为。这可能是因为 jSignature 使用了事件处理程序来捕获鼠标或触摸事件来绘制签名,但未正确处理导航事件。

解决这个问题的一种方法是在导航事件的处理程序中手动释放 jSignature 组件的焦点和事件绑定。你可以尝试以下方法:

  1. 在导航事件(例如后退按钮的点击事件)的处理程序中,添加以下代码:
$('#yourSignatureElement').jSignature('reset');

其中,#yourSignatureElement 是你用于呈现 jSignature 组件的 HTML 元素的选择器。

  1. 然后,你可以尝试模拟真实的后退行为,例如使用 window.history.back() 或其他相应的导航操作。

这样做的目的是先重置 jSignature 组件,以防止它继续捕获导航事件,然后再执行实际的后退操作。

如果上述方法不起作用,还可以尝试其他解决方案:

  • 禁用 jSignature 组件的事件处理程序,直到导航事件完成,然后再重新启用它们。
  • 在导航事件的处理程序中,销毁并重新实例化 jSignature 组件。

根据具体的代码和环境,解决方法可能会有所不同。如果问题持续存在,请尽可能提供更多的代码和上下文信息,以便更好地理解问题并给出更具体的解决方案。


jSignature jSignature is a signature capture applet made for browsers. It is written in JavaScript and supports many desktop and mobile browsers. It's so easy to use and integrate, you would have no excuse not to use it. https://willowsystems.github.io/jSignature/#/about/

禁止后退可以使用JavaScript中的history.pushState()和history.replaceState()方法。对于jSignature组件的问题,可以尝试在禁止后退的同时,对jSignature组件进行特殊处理。比如说,在组件初始化时,使用addEventListener方法监听浏览器的后退事件,并在事件处理函数中阻止事件,避免后退事件影响jSignature组件的正常工作。

【Vue/Js】通过jSignature插件实现h5签名的完整可运行实例,横屏、竖屏两个实例(代码完整,直接运行)
可以参考下

看看页面代码有逻辑问题否


参考gpt
对于禁止后退并且使用jSignature签名组件的场景,您可以尝试以下解决方案:

  1. 使用history.pushState()方法:在禁止后退的同时,使用history.pushState()方法来修改浏览器的历史记录,这样在点击后退按钮时不会触发页面的后退操作。您可以在每次用户进行签名操作时调用该方法。示例代码如下:
history.pushState(null, null, window.location.href);
window.addEventListener('popstate', function() {
  history.pushState(null, null, window.location.href);
});
  1. 监听键盘事件:在页面加载时,使用JavaScript监听键盘事件,当用户按下后退键时,阻止默认的后退行为。示例代码如下:
window.addEventListener('keydown', function(e) {
  if (e.key === 'Backspace') {
    e.preventDefault();
  }
});
  1. 使用全屏模式:将页面设置为全屏模式,这样用户无法通过手势或按钮触发浏览器的后退操作。请注意,全屏模式可能会影响用户体验,因此请谨慎使用。

另外,关于jSignature在移动设备上出现问题的情况,可能是因为移动设备上的触摸事件和滑动手势与jSignature的签名操作冲突。您可以尝试禁用移动设备上的默认滑动手势,或者使用专门为移动设备优化的签名组件。