Javascript 书签的普遍接受的设计模式是什么?

发布于 2024-10-14 06:17:57 字数 195 浏览 8 评论 0原文

是否最好插入一个 iFrame 并在其中执行任何需要执行的操作,以免页面因额外的脚本、CSS 样式等而变得混乱?当主窗口和 iFrame 之间无法通信时,如何检测事情已完成并删除 iFrame?

将脚本/CSS 插入 DOM 并在那里进行工作是否可以接受?

我的主要示例是 Instapaper 书签,它使用 iFrame 并在完成后将其关闭。

Is it best to insert an iFrame and do whatever needs to be done in there, so as to not clutter the page with your extra scripts, CSS styles, etc? How do you detect that things are complete and remove the iFrame when you can't talk between the main window and the iFrame?

Is it acceptable to insert scripts/CSS into the DOM and do your work there?

My main example is the Instapaper bookmarklet, which uses an iFrame and closes it when it's all done.

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

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

发布评论

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

评论(2

呢古 2024-10-21 06:17:57

我做过的所有书签都是直接插入到主页的 DOM 中的。所有代码都位于该小书签的命名空间内,因此 DOM 污染保持在最低限度,当然,还会进行检查以确保与现有变量名称不发生冲突。

插入到主文档的 DOM 中的原因是因为它使一切变得更容易 - 很少有任何充分的理由让你自己变得更加困难:)

但这当然取决于你的目标。

All the bookmarklets i have ever done are directly inserted into the DOM of the main page. All the code has lived inside a namespace for that bookmarklet so the DOM pollution is kept at a minimum, and of course there are checks to make sure there are no collisions with existing variable names.

The reason for insertion into the DOM of the main document is because it makes everything easier - there is rarely any good reason to make it harder on yourself than it has to be :)

But of course this depends on your goals.

数理化全能战士 2024-10-21 06:17:57

模式 1:

javascript:void(document.title += 'HAI!')

任何小书签返回值都会转换为 String 并按照传递给 document.write 的方式进行操作
void 运算符阻止它

模式 2:

javascript:(function(){ for ( var i = 0; i < document.images.length; i++ ) document.images[i].title = document.images[i].alt; })()

小书签在全局范围内运行,因此如果没有匿名函数,上面的代码将“泄漏”循环计数器为 window.i

Pattern 1:

javascript:void(document.title += 'HAI!')

any bookmarklet return value gets converted toString and act as it was passed to document.write
void operator prevents it

Pattern 2:

javascript:(function(){ for ( var i = 0; i < document.images.length; i++ ) document.images[i].title = document.images[i].alt; })()

bookmarklets are running in the global scope, so without anonymous function code above will "leak" loop counter as window.i

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