如何在StackExchange站点的此用户脚本中找到缺陷?

时间:2016-01-14 22:20:41

标签: javascript firefox greasemonkey userscripts

直到几天前,以下用户脚本(GreaseMonkey)才能完美运行。

// ==UserScript==
// @name        OpenID prefill
// @include     *://stackoverflow.com/users/login*
// @include     *://meta.stackoverflow.com/users/login*
// @include     *://superuser.com/users/login*
// @include     *://meta.superuser.com/users/login*
// @include     *://serverfault.com/users/login*
// @include     *://meta.serverfault.com/users/login*
// @include     *://askubuntu.com/users/login*
// @include     *://meta.askubuntu.com/users/login*
// @include     *://seasonedadvice.com/users/login*
// @include     *://meta.seasonedadvice.com/users/login*
// @include     *://crossvalidated.com/users/login*
// @include     *://askdifferent.com/users/login*
// @include     *://meta.crossvalidated.com/users/login*
// @include     *://*.stackexchange.com/users/login*
// @include     *://stackapps.com/*
// @exclude     *://chat.stackexchange.com/*
// @exclude     *://api.*.stackexchange.com/*
// @exclude     *://data.stackexchange.com/*
// @exclude     *://area51.stackexchange.com/*
// @version     1
// @grant       none
// ==/UserScript==
(function ()
{
    window.addEventListener('load', function()
    {
        document.getElementById('show-more-options').style = 'display: block;'; /* make visible */
        document.getElementById('more-options-link').style = 'display: none;'; /* hide */
        document.getElementById('openid_identifier').value = "https://my.url.tld/and/path/";
        document.getElementById('submit-button').style = 'display: none;'; /* hide */
        document.forms['login-form'].submit();
    }, false);
})();

这个想法是这样的:我想用OpenID登录。我只是希望它默认显示OpenID选项,将URL预填充到我的OpenID提供程序,然后提交表单。

JavaScript不是我最强的技能,但我自己想出了这个。但是,这个脚本几天前停止了工作。

现在我找到了一些时间来研究它,我被这个元素的ID仍然相同的事实所困扰。所以我想知道破坏剧本会发生什么。

即使只显示OpenID表单也不再有效,也不会隐藏"更多选项链接"。

我不能排除其中一个Firefox更新也是导致破坏的原因。但是我该如何确定这个问题呢?

2 个答案:

答案 0 :(得分:1)

我认为您可以使用Firebug或Chrome中的开发工具进行调查。 它会告诉你是否有javascript错误,你实际发布的内容(帖子的标题和正文)以及服务器的响应是什么。

您还可以跟踪浏览器和服务器之间的整个通信,并且可以复制浏览器发送的其中一条消息并使用curl重新执行(这在很多情况下都有帮助)。

答案 1 :(得分:0)

样式修改应将样式名称作为属性

document.getElementById('...')。style.display ='block';