Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 书签可以存储配置数据吗?_Javascript_Bookmarklet - Fatal编程技术网

Javascript 书签可以存储配置数据吗?

Javascript 书签可以存储配置数据吗?,javascript,bookmarklet,Javascript,Bookmarklet,据我所知,它们是在调用它们的页面的原始位置执行的。虽然这正是它们有用的原因,但它限制了bookmarklet保持状态的能力 具体来说,我想存储bookmarklet的配置数据。一个用例是,例如,在不改变代码的情况下,允许对行为进行持久的独立于站点的定制 其他标准包括: 保护bookmarklet配置免受其他bookmarklet的不必要访问 与受信任的其他bookmarklet共享bookmarklet联合配置 保护bookmarklet配置免受可能的恶意网站攻击 一个极端的例子是bookm

据我所知,它们是在调用它们的页面的原始位置执行的。虽然这正是它们有用的原因,但它限制了bookmarklet保持状态的能力

具体来说,我想存储bookmarklet的配置数据。一个用例是,例如,在不改变代码的情况下,允许对行为进行持久的独立于站点的定制

其他标准包括:

  • 保护bookmarklet配置免受其他bookmarklet的不必要访问
  • 与受信任的其他bookmarklet共享bookmarklet联合配置
  • 保护bookmarklet配置免受可能的恶意网站攻击
一个极端的例子是bookmarklet将内容与第三方文件托管服务(如Dropbox)同步,这需要安全地存储身份验证密钥

有这种可能性吗

附加说明
  • 我主要使用iOS在iOS和Windows上添加行为。iOS部分阻止使用浏览器扩展(这将限制可移植性)
  • 我之所以特别尝试使用bookmarklet,是因为我没有访问服务器的权限,所以与webservices相关的bookmarklet中使用的一些技术不适用
我想到的可能的解决办法
  • 可以手动将配置放入bookmarklet中,例如,在github这样的公共服务上托管主javascript,并创建一个代理bookmarklet,用
    -选项加载它,例如

    javascript:function runBmlet(url){ var s=document.createElement("script"); s.src=url; document.head.appendChild(s); }; runBmlet("http://url.of/my/script.js#DropboxData=YOURDATAHERE");
    
    但是,从长远来看,将配置存储在类似于本地存储的东西中要方便得多

    编辑不幸的是,该解决方案根本不起作用;某些网页使用策略
    script src'safe eval'…
    阻止从不受信任的源加载javascript,并通过mime类型检查阻止从Dropbox或Github等处加载javascript文件


bookmarklet可以使用cookies和localStorage—可以存储在运行的页面范围内的任何内容。如果启用CORS,Bookmarklets可以创建webbugs和ajax跨域。因此,您可以在bookmarklet中执行任何操作,也可以在包含其他javascript的网页中执行任何操作。这可能是从托管的数据库获取身份验证的外部JSelsewhere@mplungjan不幸的是,在我的使用案例中,没有任何东西托管在别处,或者充其量在Dropbox这样的web服务中,我无法控制。为什么?你可以在免费服务器或你自己的服务器上托管这样的东西我不知道“免费服务器”选项;如果需要的话,一个自托管的版本也是可行的(Raspberry Pi或类似的)。不过,我更感兴趣的是解决方案,它允许将代码传递给其他人,既不为所有用户提供中央数据存储,也不需要设置自己的服务器。因此,(ab?)使用bookmarklets来达到这个目的。很抱歉,在我看来这是不可行的