无法使用书签运行外部 JavaScript

发布于 2024-08-20 15:03:00 字数 514 浏览 2 评论 0原文

对于 JS 完全是新手。

我需要使用外部脚本来修改当前页面中的某些元素,并将其作为书签进行访问。

如果我修改网页的html源代码插入以下<脚本>线路:

s=document.createElement('script');
s.type='text/javascript';
s.src='script.js';
document.getElementsByTagName('head')[0].appendChild(s);

效果很好。但是,如果我使用相同的行创建一个 javascript: bookmarklet,我会获得一个包含以下字符串的空白页面:

[object HTMLScriptElement]

而如果我创建一个 bookmarklet,将该行添加

void(null);

到之前的书签中,则网页不会消失,但脚本不会执行。

为什么?

Totally newbie about JS.

I need to use an external script which modifies some elements in the current page accessing it as a bookmarklet.

If I modify the html source code of the web page inserting the following < script > lines:

s=document.createElement('script');
s.type='text/javascript';
s.src='script.js';
document.getElementsByTagName('head')[0].appendChild(s);

it works fine. But if I create a javascript: bookmarklet with the same lines, I obtain a blank page with the following string:

[object HTMLScriptElement]

whereas, if I create a bookmarklet adding the line

void(null);

to previous ones, the web page does not disapper but the script is not executed.

Why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

君勿笑 2024-08-27 15:03:00

常见的做法是简单地使用自执行函数表达式,如下所示:

(function () {
  var s=document.createElement('script');
  s.type='text/javascript';
  s.src='script.js';
  document.getElementsByTagName('head')[0].appendChild(s);
}());

Bookmarklet:

javascript:(function(){var s=document.createElement('script');s.type='text/javascript';s.src='script.js';document.getElementsByTagName('head')[0].appendChild(s);}());

该函数将返回 undefined (不提供返回值),从而阻止导航。

另请注意,这将避免创建与页面上使用的其他变量重叠的全局变量(如 s),因为所有变量都是在匿名函数的范围内创建的。

A common practice is to simply use a self-executing function expression, something like this:

(function () {
  var s=document.createElement('script');
  s.type='text/javascript';
  s.src='script.js';
  document.getElementsByTagName('head')[0].appendChild(s);
}());

Bookmarklet:

javascript:(function(){var s=document.createElement('script');s.type='text/javascript';s.src='script.js';document.getElementsByTagName('head')[0].appendChild(s);}());

The function will return undefined (no return value supplied) preventing the navigation.

Note also that this will avoid creating global variables (like s) that can overlap with other variables used on the page, because all variables are created in the scope of the anonymous function.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文