使用魔改element plus时出现的Prototype错误
参照了[[油猴脚本开发指南]魔改Element plus](https://bbs.tampermonkey.net.cn/thread-1039-1-1.html)给网站引入了element plus
很多网站使用都正常,但是某个网站使用element组件就会报这个错误
!(data/attachment/forum/202501/06/221314qrram0y9rv91very.png)
!(data/attachment/forum/202501/06/221235ojoy6rjp1mye1rei.png)
网查了下像是prototype方法跟网站的冲突了
但是不知道要怎么解决,大大们能给点头绪么~ 网站的代码复写进攻性太强导致的...
能想到的大概两个思路
1.考虑换个框架
2.可以考虑针对这部分原型继承再做一层劫持,然后通过throw Error检查上层堆栈
如果来自于油猴脚本就走正常流程,如果来自于网页就走他的流程 李恒道 发表于 2025-1-6 23:11
网站的代码复写进攻性太强导致的...
能想到的大概两个思路
1.考虑换个框架
好的,{:4_97:}感谢大大ヾ(•ω•`)o POORZHA 发表于 2025-1-6 23:45
好的,感谢大大ヾ(•ω•`)o
另外element-plus引入之前有个大佬提供了一个更爽的版本
https://learn.scriptcat.org/%E5%AE%9E%E7%94%A8%E7%9F%A5%E8%AF%86%E5%BA%93/%E5%BC%95%E7%94%A8%E5%BA%93%E4%BD%BF%E7%94%A8/Element%20Plus%E7%9A%84%E5%BC%95%E7%94%A8/#%E9%80%9A%E8%BF%87-require-%E8%BF%9B%E8%A1%8C%E5%BC%95%E7%94%A8
最底下有不用魔改插Base64语句就能实现油猴兼容的版本,所以基本不再需要魔改了 李恒道 发表于 2025-1-7 00:52
另外element-plus引入之前有个大佬提供了一个更爽的版本
https://learn.scriptcat.org/%E5%AE%9E%E7%94%A ...
昂好的,感谢提醒(╹ڡ╹ ) 李恒道 发表于 2025-1-6 22:29
网站的代码复写进攻性太强导致的...
能想到的大概两个思路
1.考虑换个框架
喔大大,我找到了个简单的办法
用document-start和Object.freeze(String.prototype);
让脚本在prototype被网页的js修改之前就给它冻住就行了 POORZHA 发表于 2025-1-8 00:35
喔大大,我找到了个简单的办法
用document-start和Object.freeze(String.prototype);
让脚本在prototype ...
牛逼!原网页一点没破损?
原网页开发者太抽象了... 好强大的功能,学习了。 emm。。。使用时发现网页的prototype.js有时候比document-start跑得还快,冻结慢了一步,不太稳定
再换个思路:等网页改完protype再改回去
AI如是说...
```
//利用了 iframe 的沙箱特性,创建一个新的、未被污染的 JavaScript 环境。 然而,这并不总是有效,因为一些修改可能影响到全局对象,即使在 iframe 中也无法避免。
// 创建一个新的 iframe 并获取其 window 对象
const iframe = document.createElement('iframe');
document.body.appendChild(iframe);
const originalWindow = iframe.contentWindow;
// 尝试恢复一些常见的 String.prototype 方法
try {
String.prototype.startsWith = originalWindow.String.prototype.startsWith;
// 可以继续添加更多需要恢复的方法...
console.log("String.prototype 恢复完成");
} catch (e) {
console.error("无法恢复某些 String.prototype 方法:", e);
}
console.log(String.prototype.startsWith)
// 移除临时创建的 iframe
document.body.removeChild(iframe);
```
将代码放在body生成后,element-ui组件调用前就行
页:
[1]