上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

使用魔改element plus时出现的Prototype错误

[复制链接]
  • TA的每日心情
    开心
    昨天 00:07
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    11

    回帖

    26

    积分

    助理工程师

    积分
    26
    发表于 3 天前 | 显示全部楼层 | 阅读模式
    悬赏20油猫币已解决

    参照了[油猴脚本开发指南]魔改Element plus

    给网站引入了element plus

    很多网站使用都正常,但是某个网站使用element组件就会报这个错误

    image.png

    image.png

    网查了下像是prototype方法跟网站的冲突了

    但是不知道要怎么解决,大大们能给点头绪么~

    最佳答案

    查看完整内容

    网站的代码复写进攻性太强导致的... 能想到的大概两个思路 1.考虑换个框架 2.可以考虑针对这部分原型继承再做一层劫持,然后通过throw Error检查上层堆栈 如果来自于油猴脚本就走正常流程,如果来自于网页就走他的流程
  • TA的每日心情
    擦汗
    2024-12-18 11:32
  • 签到天数: 194 天

    [LV.7]常住居民III

    728

    主题

    6204

    回帖

    6952

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6952

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 3 天前 | 显示全部楼层
    网站的代码复写进攻性太强导致的...
    能想到的大概两个思路
    1.考虑换个框架
    2.可以考虑针对这部分原型继承再做一层劫持,然后通过throw Error检查上层堆栈
    如果来自于油猴脚本就走正常流程,如果来自于网页就走他的流程
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:07
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    11

    回帖

    26

    积分

    助理工程师

    积分
    26
    发表于 3 天前 | 显示全部楼层
    李恒道 发表于 2025-1-6 23:11
    网站的代码复写进攻性太强导致的...
    能想到的大概两个思路
    1.考虑换个框架

    好的,感谢大大ヾ(•ω•`)o
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-18 11:32
  • 签到天数: 194 天

    [LV.7]常住居民III

    728

    主题

    6204

    回帖

    6952

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6952

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 前天 00:52 | 显示全部楼层
    POORZHA 发表于 2025-1-6 23:45
    好的,感谢大大ヾ(•ω•`)o

    另外element-plus引入之前有个大佬提供了一个更爽的版本
    https://learn.scriptcat.org/%E5% ... C%E5%BC%95%E7%94%A8

    最底下有不用魔改插Base64语句就能实现油猴兼容的版本,所以基本不再需要魔改了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:07
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    11

    回帖

    26

    积分

    助理工程师

    积分
    26
    发表于 前天 22:56 | 显示全部楼层
    李恒道 发表于 2025-1-7 00:52
    另外element-plus引入之前有个大佬提供了一个更爽的版本
    https://learn.scriptcat.org/%E5%AE%9E%E7%94%A ...

    昂好的,感谢提醒(╹ڡ╹ )
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:07
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    11

    回帖

    26

    积分

    助理工程师

    积分
    26
    发表于 昨天 00:35 | 显示全部楼层
    李恒道 发表于 2025-1-6 22:29
    网站的代码复写进攻性太强导致的...
    能想到的大概两个思路
    1.考虑换个框架

    喔大大,我找到了个简单的办法
    用document-start和Object.freeze(String.prototype);
    让脚本在prototype被网页的js修改之前就给它冻住就行了
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2024-12-18 11:32
  • 签到天数: 194 天

    [LV.7]常住居民III

    728

    主题

    6204

    回帖

    6952

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6952

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 昨天 03:17 | 显示全部楼层
    POORZHA 发表于 2025-1-8 00:35
    喔大大,我找到了个简单的办法
    用document-start和Object.freeze(String.prototype);
    让脚本在prototype ...

    牛逼!原网页一点没破损?
    原网页开发者太抽象了...
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    回帖

    2

    积分

    助理工程师

    积分
    2
    发表于 昨天 11:42 | 显示全部楼层
    好强大的功能,学习了。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:07
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    3

    主题

    11

    回帖

    26

    积分

    助理工程师

    积分
    26
    发表于 昨天 22:18 | 显示全部楼层

    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组件调用前就行

    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表