2

使用 JS 小书签在 Wordpress 编辑帖子屏幕中设置自定义字段。当我将以下代码复制/粘贴到控制台(最新的 Chrome 稳定版)时,以下代码运行良好:

document.getElementById('metakeyselect').value = "foo";
document.getElementById('metavalue').value = "bar";
document.getElementById('meta-add-submit').click();

工作顺利;我将其粘贴到控制台中,并在帖子中添加了一个新的自定义 var(我已经在 WP 中将“foo”作为 var 名称)。

在书签形式中,相同的代码如下所示:

javascript:document.getElementById('metakeyselect').value = "foo";document.getElementById('metavalue').value = "bar";document.getElementById('meta-add-submit').click();

它失败了:当我单击它时,名称和值框已填写,但没有提交任何内容。控制台显示以下错误:

Uncaught TypeError: Cannot call method 'click' of null 

知道为什么吗?相同的代码,相同的浏览器,相同的页面。

4

2 回答 2

1

我遇到了类似的问题,并且很确定这也是导致您的代码中断的原因。我最小的例子是这个网站上的以下代码(应该适用于整个 stackoverflow.com 域):

document.getElementsByName("q")[0].value="foo";

这应该将“foo”写入搜索字段(没有 id,但它是唯一名为“q”的元素)。Web 控制台和小书签都会按预期设置值,但小书签也会在短暂延迟后将页面更改为空标题和仅包含单词“foo”的正文。假设这不是仅适用于我的随机错误,那么在您的示例中引发异常的原因是小书签设置了值“foo”,然后设置了“bar”,但将网页的内容更改为“foo” ,然后在您的最后一行终止之前使用“bar”。

不幸的是,我不知道这种行为的原因(我发现这个问题正在寻找确切的信息),但这最有可能导致您的示例中的 TypeError 。

当在 Greasemonkey 脚本中使用相同的代码(例如,作为您使用 Greasemonkey 添加的按钮的 onclick 脚本)时,可能运行相同的代码没有任何问题。

[编辑:] 显然,如果小书签的计算结果不是undefined,则网站的内部 html 将替换为该值的字符串表示形式。为确保小书签的计算结果为undefined,您只需undefined在任何条件块之外键入作为最后一行。不幸的是,这意味着我对 OP 错误的假设不太可能是正确的,但至少未来的访问者仍然可能会发现这些信息很有用。

于 2019-05-28T15:59:32.467 回答
0

看起来您在控制台中使用的代码可以正常工作。

似乎将控制台代码转换为书签的方法可能会导致错误。

基本的IIFE 构造,即立即调用函数表达式,如下所示:

javascript:(function () {
    /*code here*/
})();

因此,应该工作的代码可能是这样的。

javascript:(function () {
    document.getElementById('metakeyselect').value = "foo";
    document.getElementById('metavalue').value = "bar";
    document.getElementById('meta-add-submit').click();
})();

它解决了你的问题吗?

于 2020-10-30T17:25:07.097 回答