返回

如何在 Reddit 上巧妙绕过限制修改评论文本?

javascript

如何在 Reddit 上巧妙修改评论文本

问题概述

在 Reddit 评论表单中修改文本是一个棘手的难题。尝试使用 JavaScript 直接修改文本会令人沮丧地发现,文本纹丝不动。这背后的原因是什么?

安全屏障:Reddit 的 CSP

Reddit 为其网站实施了严格的内容安全策略 (CSP)。此策略就像一个门卫,控制着网站上允许运行的脚本类型。它阻止脚本修改评论表单中的 DOM 元素,有效地阻止了直接文本修改。

绕过 CSP 的妙招

既然直接修改评论文本被阻止了,我们必须寻找迂回的方法。有两种可行的解决方法:

1. Reddit API:

使用 Reddit API 创建或编辑评论可以绕过 CSP 限制。只需获取 API 令牌,然后使用 POST 端点创建包含所需文本的新评论或编辑现有评论。

2. 浏览器扩展:

通过开发一个 Chrome 扩展,我们可以在评论表单提交时拦截并修改数据。扩展可以监听提交事件,修改表单数据,然后通过 Reddit API 将其提交。

代码示例:

使用 Reddit API:

// 获取 API 令牌
const token = await getToken();

// 创建评论
const response = await fetch(`https://oauth.reddit.com/api/comment`, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    api_type: 'json',
    thing_id: `t3_${post}`,
    subreddit,
    text,
  }),
});

使用浏览器扩展:

// 拦截表单提交
chrome.pageAction.onClicked.addListener(function (tab) {
  chrome.scripting.executeScript({
    target: { tabId: tab.id },
    function: interceptForm,
  });
});

// 修改表单数据
function interceptForm() {
  const textArea = document.querySelector('textarea[name="text"]');
  textArea.value = 'Modified text';
  form.submit();
}

结论

虽然直接修改 Reddit 评论表单文本受限于 CSP,但通过利用 Reddit API 或浏览器扩展,我们仍然可以实现所需的文本修改。这些技巧为 Reddit 用户提供了在评论中表达自己的灵活性,同时保持网站的安全和完整性。

常见问题解答:

  1. 为什么 Reddit 实施了 CSP?

    • 为了防止恶意行为和确保网站安全。
  2. 除了 API 和浏览器扩展,还有其他修改 Reddit 评论文本的方法吗?

    • 没有,直接修改 DOM 元素被 CSP 阻止。
  3. 浏览器扩展方法是否安全?

    • 只要扩展是从信誉良好的来源获得的,它就是安全的。
  4. 这些方法可以用于所有 Reddit 子版块吗?

    • 是的,这些方法适用于所有允许评论的子版块。
  5. 修改 Reddit 评论文本是否违反 Reddit 的服务条款?

    • 只要不滥用,修改评论文本本身并不违反服务条款。