logo

ScriptCat

  • ホーム
  • コミュニティ
  • スクリプトリスト
  • ブラウザ拡張機能
  1. /
  2. スクリプトマーケット
  3. /
  4. ajaxHooker
  • ホーム
  • コード
  • フィードバック
    2
  • 評価
  • バージョン一覧
ScriptCat
GitHub
監査ログ
サービス利用規約
プライバシーポリシー
免責事項

© 2022-現在 ScriptCat. All rights reserved.

jsonp 拦截
解決済み#1395hiders10ヶ月前 に作成

読み込み中…
  • cxxjackie10ヶ月前

    読み込み中…
  • cxxjackie
    10ヶ月前
    ラベルを追加: 新機能
  • hiders10ヶ月前

    読み込み中…
  • hiders
    10ヶ月前フィードバックを閉じました
  • cxxjackie
    9ヶ月前フィードバックを閉じました
No data
ログイン後にコメント
ラベル
新機能
フォロー
参加者

大佬,是否考虑对jsonp请求进行支持, 具体案例为苏宁商品详情信息、评论信息

js在技术上要劫持jsonp并非不可能,但跟xhr和fetch劫持属于完全不同的思路,因为jsonp是通过创建script标签实现的,劫持过程与我写的另一个库ElementGetter更接近,下面是用伪代码写的一个很粗糙的例子:

elmGetter.each('script[src*="callback="]', script => {
    // 从script.src中提取出url和响应函数
    GM_xmlhttpRequest(...); // 重新发起请求获取响应值
    // 修改响应值,手动触发响应函数
});

这个库不支持jsonp除了劫持思路不同,更重要的是接口设计有很大冲突,因为jsonp都是get请求、没有data、无法设置请求头等等,虽然改成GM_xmlhttpRequest后可以一定程度上支持这类修改,但违背了jsonp的设计本意,且要求脚本必须引入GM_xmlhttpRequest,这可能带来一些安全上的担忧。我个人更倾向于重新写一个库来处理jsonp,不过这种需求比较小众,代码也很简单,上面已经给出思路了,你可以尝试自己动手解决,手写一个MutationObserver就可以脱离ElementGetter的依赖。

好的,谢谢大佬 我试试