-1

有问题的脚本是:

<script>
var idcomments_acct = '1234567890';
var idcomments_post_id;
var idcomments_post_url;
</script>
<span id="IDCommentsPostTitle" style="display:none"></span>
<script type='text/javascript' src='http://www.intensedebate.com/js/genericCommentWrapperV2.js'>
</script>

它调用了一个名为 IntenseDebate 的第三方博客评论系统。当用户提交新评论时,我想在将帖子数据发送给第三方之前“拦截”它,以便我可以将其存储在本地,然后像往常一样发送。这完全有可能吗,还是我必须寻找其他选择?

4

2 回答 2

1

看起来您指向的脚本甚至没有执行 POST,它只是执行了一个 hacky GET 请求,在脚本标记的 src 属性中滥用查询参数。这是有问题的代码部分:

var commentScript = document.createElement("script");
commentScript.type = "text/javascript";
commentScript.src = "http://intensedebate.com/js/genericCommentWrapper2.php?acct="+idcomments_acct+"&postid="+idcomments_post_id+"&title="+idcomments_post_title+"&url="+idcomments_post_url;
document.getElementsByTagName("head")[0].appendChild(commentScript);

您要做的是获取该src部分中最后一个脚本标签的head。他们不清理他们的脚本,所以应该仍然存在。就像是:

var children = document.getElementByTagName('head')[0].children;
var url = children[children.length-1].src;

从那里,只需剖析 url 即可获取原始查询参数。他们似乎使用以下内容:

  • acct- 帐户ID
  • postid- 帖子编号
  • title- 帖子标题
  • url- 发布的网址

我在任何地方都没有看到帖子正文,所以也许所有内容都在标题中?

获取所有字段的快速技巧是使用正则表达式:

var parts = url.match(/acct=(.*)&postid=(.*)&title=(.*)&url=(.*)$/);
if (!parts) {
    alert("Regex couldn't parse all the things");
}
var acct = parts[0];
var postid = parts[1];
var title = parts[2];
var url = parts[3];

此正则表达式未经测试且不安全,但它应该可以完成工作 =D。

于 2013-07-16T13:51:16.897 回答
0

将您自己的事件附加到他们的“添加评论”按钮以发送和存储评论数据。除非您真的想要第三方正在使用的所有数据,否则不要过于复杂。

于 2013-07-16T13:50:27.000 回答