标签: bookmarklet

编写谷歌文档表单提交脚本

我正在尝试创建一个解析页面的书签,并通过我定义的表单将结果发送到googledocs电子表格.

脚本的相关部分是:

var form = document.createElement("form");

form.action = "http://spreadsheets.google.com/formResponse?formkey=Fd0SHgwQ3YwSFd5UHZpM1QxMlNOdlE6MA&ifq";
form.method = "POST";
form.id="ss-form";
form.innerHTML = ["<input id='entry_0' name = 'entry.0.single' value = '" + orderDate + "'/>", "<input name = 'entry.2.single' value = '" + email + "'/>", "<input name = 'entry.3.single' value = '" + customerID + "'/>", ].join("");
form.submit();


alert(form.innerHTML);
Run Code Online (Sandbox Code Playgroud)

//返回:

没有任何东西通过书签保存到表单 - 在我的书签的代码中捕获谷歌的响应的任何方式?(fwiw,我通过jQueryify注入了jQuery)

编辑:

Firebug的Net面板没有听到由bookmarklet触发的任何活动 - 我如何通过goolgle的viewform方法而不是formresponse来处理这个问题.

我想提交的表格位于:

http://spreadsheets.google.com/viewform?hl=en&formkey=dFd0SHgwQ3YwSFd5UHZpM1QxMlNOdlE6MA

我怎样才能将脚本值注入该表单然后再次提交...通过在被解析的页面上触发的bookmarklet中的脚本?

jquery bookmarklet google-docs

10
推荐指数
2
解决办法
1万
查看次数

Bookmarklet安全性考虑因素CSRF是关键所在

我的书签可以从任何网站调用,基本上允许用户从远处向他的收藏中插入一行 - 如果他已登录.

现在我想为我的网站启用CSRF保护,因为书签基本上是非伪造的跨网站请求,我想到了我如何区别于伪造的.
这不是一个高安全性的环境,但我也对原则感兴趣.

我以为我有办法做到这一点,但后来意识到它有很多问题.

创见

  • 生成包含在bookmarklet-link中的随机密钥.密钥的哈希值保存在数据库中.随机密钥只允许访问插入此集合的权限,不能在其他任何地方使用.
  • bookmarklet从我的服务器加载一个更长的脚本,所以我可以这样提供CSRF预防令牌
  • 要求用户登录

问题

  • 如果我有bookmarklet密钥,我是否需要反CSRF令牌?
  • 如果用户在恶意网站上点击他的书签,我有什么方法可以保护书签键吗?
  • 我不希望用户名和密码存储在bookmarklet链接中,因为任何有权访问计算机的人都会获得密码,所以我决定使用随机密钥.
    • 但是如果我只存储哈希,我就不能生成两次相同的书签链接,所以当用户想要在另一个浏览器/计算机中使用书签时,他繁琐地必须从旧的链接导入链接或者中断旧的链接.
    • 但是我不应该存储明文密钥,因为获得数据库访问权限的人可以使用此密钥将行插入不属于他的帐户中.
    • 可能的解决方法,我可以要求用户提供他的密码,他随时创建书签和散列密码很多次,并把该散列在URL中,并将该散列我的数据库的哈希值.但当然这会打开更糟糕的安全漏洞.
      • 我可以用"妈妈的娘家姓"这样的东西代替
      • 由于随机盐,我无法使用bcrypt进行散列,对吧?什么哈希函数是正确的?或者你会忽略整个想法?
  • 如果我将书签密钥丢失,恶意网站可以简单地嵌入书签并从中提取有效的CSRF令牌,对吧?

好主意?或者你没有F而没有CSR吗?


编辑,指定用例

我根本没想到的一件事是Sripathi Krishnan建议使用iframe.

我没有指定我的用例,所以是的,iframe是上述问题的有效解决方案.

然而,实际上我的书签目前在运行时确实与网站进行了一些基本的交互(意味着表格已经存在,用户可以在网站DOM中更改他的选择,这应该改变表格).我已经准备好为我的用例解雇这个功能,如果事实证明,没有合理安全的方式来区分伪造的非伪造跨站请求 - 但我仍然对理论水平感兴趣.

security hash bookmarklet csrf

10
推荐指数
1
解决办法
898
查看次数

在鼠标悬停时突出显示DOM元素,就像inspect一样

我们有一个书签,用户点击一个按钮,像highligther这样的检查需要启动.我们希望这是跨浏览器.

为此,我们需要在鼠标移动过程中检测DOM元素,一旦我们有了这个元素,我们需要用CSS突出显示.

我们在通过鼠标移动检测DOM元素时遇到问题,您能指导我们如何完成这项工作吗?

一旦我们有了这个DOM元素,在用户点击时我们需要提取XPath.

html javascript dom bookmarklet highlight

10
推荐指数
2
解决办法
2万
查看次数

如何CSS沙盒/重置当前页面中的整个DIV区域?

我们正在开发一个书签,当书签加载到不同的网站上时,例如:cnn.com,bbc.co.uk,yahoo.com,它以各种风格显示,我们很难重置这些样式.

bookmarklet内容位于当前页面DOM中,而不是iframe中(因为我们需要cookie并访问DOM).

我们尝试使用CSS重置,但这只重置一些基本的东西,比如边距.例如,有一个自定义表单的页面,或者它继承的圆形表矩形,它不应该.

有没有办法让我们可以完全隔离当前页面中的DIV区域,只显示我们想要的内容?

html javascript css bookmarklet

10
推荐指数
1
解决办法
3322
查看次数

JavaScript注入和书签有什么区别吗?

根据维基百科关于Bookmarklets的文章(http://en.wikipedia.org/wiki/Bookmarklet),Bookmarklets的概念是:

Web浏览器将URI用于标记的href属性和书签.URI方案(例如http:,file:或ftp:)指定协议和字符串其余部分的格式.浏览器还实现了一个前缀javascript:对解析器来说就像任何其他URI一样.在内部,浏览器看到指定的协议是javascript,将字符串的其余部分视为JavaScript应用程序然后执行,并将结果字符串用作新页面.

它表示结果字符串用作新页面.那么这是否意味着浏览器的原始DOM不受该字符串的影响?但是,如果将结果字符串用作新页面,我如何在现有DOM中更改或注入新的DOM元素?因为脚本提醒Hello或注入一些新的DOM元素并没有真正返回任何内容.他们有点在现有的DOM上工作.

现在,在Internet Explorer中,除了使用Bookmarklets在页面上执行一些JavaScript之外,我还可以编写一个BHO插件并按以下方式注入:

        document = (HTMLDocument)webBrowser.Document; 
        var injectedJS = System.IO.File.ReadAllText("InjectedJS.js");
        var window = document.parentWindow;
        window.execScript("(function(){ " + injectedJS + " })()");
Run Code Online (Sandbox Code Playgroud)

同样在chrome中,我可以编写一个扩展来实现同样的目的:

var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);
Run Code Online (Sandbox Code Playgroud)

这些有何不同?我所拥有的高级问题是:

  1. 这三种方法是否在不同的环境中执行JavaScript代码?
  2. 对于其中一个没有另外一个没有的限制吗?
  3. 执行结果呈现给用户或反映在浏览器中的方式有​​什么不同吗?
  4. "JavaScript注入"和"Bookmarklets"这两个术语之间是否有任何区别?虽然我认为JavaScript注入是一种效果而Bookmarklets是实现这一目标的一种方式,但BHO和Chrome扩展是另一种方式.
  5. 如果4中的假设是正确的,那么使用BHO的execScript方法或在浏览器中使用javascript:protocol 执行JavaScript的方式有什么不同吗?

javascript bho bookmarklet javascript-injection google-chrome-extension

10
推荐指数
1
解决办法
1979
查看次数

创建一个动态的Pinterest按钮?

有没有办法创建动态Pinterest按钮?我正在尝试将Pinterest支持添加到主要内容是动态的站点,因此我只在页面源中有一个Pin It按钮,它固定了当前内容.

我无法找到使用预建Pin It按钮执行此操作的方法,因为它要求您提前指定硬编码的URL.

但是,还有一个Pin It bookmarklet可以实现我想要的效果 - 但这需要用户手动将其添加到书签栏.

有没有什么方法可以(a)修改Pin It按钮,或(b)以某种方式将书签集成到我的页面中,以便它可以固定任何当前页面内容?

bookmarklet dynamic button pinterest

9
推荐指数
1
解决办法
7957
查看次数

如何禁用位置:在网页中修复?

本网站:

http://nautil.us/

有一个非常讨厌的标题,总是在屏幕上,不会滚动.

如果我右键单击它并在firefox中"检查元素",那么我发现css包含"position:fixed;",如果我解开它,标题会表现出来,并按照上帝要的标题滚动.

有没有办法让firefox自动执行此操作,即删除所有位置:渲染之前所有页面中的固定行?

编辑 - - - -

经过一番思考后,我想要的是一个可以杀掉这类东西的书签.

那么如何让SciMonster看起来很有前途:

var x = document.querySelectorAll('*'); // get all elements
for (var i = 0; i< x.length; i++) {
    if (x[i].style.position == 'fixed') {
        x[i].style.position = 'static';
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript:???
Run Code Online (Sandbox Code Playgroud)

适合进入firefox书签的位置字段?

在win条件下,如果你去http://nautil.us,然后单击bookmarklet按钮,浮动标题会停止浮动并滚动,就像你position: fixed;在元素检查器中删除了一样.

html javascript css firefox bookmarklet

9
推荐指数
1
解决办法
2951
查看次数

Mobile Safari阻止URL中的Javascript - Safari无法运行脚本,因为不允许以这种方式使用JavaScript

我正在研究如何创建用于移动safari的bookmarklet,我遇到了这个问题:

我不确定为什么我无法找到关于这个主题的任何问题.我的谷歌搜索也没有任何结果.但似乎iOS已经完全禁止将JavaScript输入到移动Safari的地址栏中.有一条消息显示如下:

Safari无法运行脚本,因为不允许以这种方式使用JavaScript

他们甚至可以确保当你在移动版Safari上编辑书签时,没有办法逃避单引号或双引号,并且他们完全禁用了键盘上的双引号 - 从而妨碍了用户的能力创建一个包含这些字符的书签.

那么有没有办法制作一个实际上做任何事情的书签?例如,我可以创建一个书签,允许我使用所选文本作为参数进入网址链接到特定网站吗?

它只是我还是这个新东西?

javascript safari bookmarklet ios

9
推荐指数
1
解决办法
4384
查看次数

插入动态创建的DOM节点的处理程序

我喜欢在我不拥有或控制的页面上运行自定义脚本.很多时候,这些页面都动态创建了我想要应用函数的内容.

这可能吗?如果是这样,我该怎么做?理想情况下,我正在寻找一些实时jQuery的live方法,除了它不是绑定一个事件,就像click它更像是在DOM中加载元素时发生的事件. load事件对某些元素有效,但我不认为...

对于此问题,假设您无法查看或更改插入DOM节点的代码.我想要一种可以在用户脚本或书签中使用的技术,可以跨多个不相关的站点使用.

编辑:我正在寻找在我的反转颜色bookmarklet上使用的东西:JavaScript:在页面的所有元素上反转颜色

javascript jquery dom bookmarklet userscripts

8
推荐指数
2
解决办法
1万
查看次数

绕过覆盖"helvetica"字体系列的@ font-face声明

我有一个书签,可以将小部件插入任何网站的页面.小部件的样式被具有以下CSS @font-face声明的特定站点破坏:

@font-face {
    font-family: "helvetica";
    src: url("http://cdn2.yoox.biz/Os/fonts/helveticaneueltstdmdcn.eot?iefix") format("eot"),
         url("http://cdn2.yoox.biz/Os/fonts/helveticaneueltstdmdcn.woff") format("woff"),
         url("http://cdn2.yoox.biz/Os/fonts/helveticaneueltstdmdcn.ttf") format("truetype"),
         url("http://cdn2.yoox.biz/Os/fonts/helveticaneueltstdmdcn.svg#svgFontName") format("svg");
}
Run Code Online (Sandbox Code Playgroud)

我的书签插入使用黑体无处不在,在这一个网站上的小部件,它看起来可怕,因为浏览器是Helvetica字体映射到@font-face该名称,而不是标准黑体系统字体的声明.

问题:有没有办法覆盖/绕过这个@font-face声明或创建另一个@font-face映射到系统helvetica字体的声明?

css bookmarklet css3 font-face

8
推荐指数
1
解决办法
5711
查看次数