从书签运行时,书签无法运行,但从控制台运行时

时间:2018-08-07 09:42:08

标签: javascript bookmarklet

我正在尝试创建一个书签,该书签将在网页的文本区域中插入一些文本(该网页仅供内部使用,因此链接没有意义)。

这是我尝试过的javascript代码的示例:

(function(){document.getElementById("textareaID").value="Some text";})();

我想指出的是,我为相同的结果尝试了不同的元素选择器(byClass,query ...)和不同的属性(甚至tabindex)。在Chrome和IE11中也都尝试过。

因此,出于某些奇怪的原因,当我从控制台(或作为代码段)运行它时,我的javascript运行了,但是我收到错误消息“无法将属性'value'设置为null” 从书签菜单运行它。

我尝试自己创建一个书签

javascript:(function(){document.getElementById("textareaID").value="Some text";})();

并尝试使用在线书签创建器对特殊字符进行编码

javascript:(function(){document.getElementById(%22textareaID%22).value=%22Some%20text%22;})();

但没有运气。

书签绝对可以在页面上运行(尝试使用警报“ Hello”),但是我似乎在“捕获”元素时遇到问题。 我也注意到某些元素的ID有时会改变(虽然不确定为什么),但是我总是检查以确保我尝试使用的ID存在或我使用某些固定值(如tabindex)。此外,正如我说的那样,它可以从控制台运行,因此我无法以某种方式搞砸它……还是可以吗?

1 个答案:

答案 0 :(得分:0)

所以问题出在执行上下文。 因为元素的ID发生了变化,所以我必须先检查它们,然后才能从控制台运行js并检查将执行上下文从 top 更改为元素所在的位置。这就是为什么它是通过控制台而不是通过书签工作的。

因此,要在特定框架内写入文本框:

let Iframe =  document.getElementById('yourIframe').contentWindow.document
let value = Iframe.getElementById("textboxID").value = "Some Text"

之后,剩下的就是将所有内容包装在javascript:(function(){..your code here..})();中以创建书签。