使用Javascript Bookmarklet在当前窗口中打开本地html文件

使用Javascript Bookmarklet在当前窗口中打开本地html文件,javascript,browser,bookmarklet,Javascript,Browser,Bookmarklet,我正在尝试构建一个示例bookmarklet来获取当前网页的源代码并将其传递给验证器。Validator不是一个在线网站,而是一个包含大量javascript和html文件的文件夹。我正在试着打开file:///C:/Users/Electrifyings/Desktop/Validator/Main.html 在javascript bookmarklet代码的帮助下归档,并将源代码放在新打开的窗口的textarea中,但由于一些我不知道的原因,它无法工作 以下是算法示例代码: javascr

我正在尝试构建一个示例bookmarklet来获取当前网页的源代码并将其传递给验证器。Validator不是一个在线网站,而是一个包含大量javascript和html文件的文件夹。我正在试着打开file:///C:/Users/Electrifyings/Desktop/Validator/Main.html 在javascript bookmarklet代码的帮助下归档,并将源代码放在新打开的窗口的textarea中,但由于一些我不知道的原因,它无法工作

以下是算法示例代码:

javascript:(function(){var t = document.body.innerHTML;window.open('file:///C:/Users/RandomHero/Desktop/test.html',_self);document.getElementById("validator_textarea")=t;})()
以下是步骤:

  • 获取变量中的当前网页源代码
  • 在当前或新窗口或新选项卡中打开本地存储的HTML网页(无论哪种方式我都可以,但运气不好)
  • 将变量中的源代码放入新打开的HTML文件的validator textarea中
  • 我已经尝试了上面的代码,但是在打开新窗口的部分卡住了。要么根本不打开新窗口,要么打开空白窗口而不加载文件

    希望在这个问题上得到一些帮助,非常感谢

    哦,顺便说一句


    Windows7x64,试用IE、Firefox和Chrome。所有最新和稳定的版本。我想这不是浏览器方面的问题,而是与javascript代码不使用file:///协议打开URI有关的问题。如果需要更多详细信息,请告诉我。:)

    您不希望您访问的网页能够打开
    文件://c:/Program Files/Quicken/YourSensitiveTaxInfo
    ,对吗?因为如果你犯了一个错误,访问了一个“坏”网站(要么是一个劣质网站,要么是一个被黑客入侵的好网站),intarweb上的坏人会突然访问到你的私人信息。那太糟糕了

    浏览器制造商知道这一点,因此他们设置了非常严格的限制,以防止Javascript代码访问用户本地计算机上的文件。这就是阻碍你计划的原因

    解决方案

    • 将整个验证器构建到bookmarklet中(除非它非常小,否则不太可能工作)
    • 把你的验证码放到网上某个地方
    • 编写一个插件(因为用户必须选择安装插件,所以他们比网页自由得多……即使对于Firefox、Chrome等,插件基本上只是Javascript)
    **编辑**

    • 额外奖金解决方案,如果您不局限于纯客户端实现:
    • 让bookmarklet向页面添加一个普通(HTML)表单
    • 还可以向页面添加iframe(如果使用CSS样式将其隐藏,也可以)
    • 将表单的target属性设置为指向iframe。这样,当用户提交表单并且服务器回复该提交时,服务器的回复将转到(隐藏的)iframe,而不是像通常那样替换页面
    • 在表单中添加一个文件输入-您将无法使用Javascript访问该输入中的文件,但这没关系,因为您的服务器将进行访问,而不是您的bookmarklet
    • 编写一个服务器端脚本,该脚本接受表单提交,读取随附的文件,然后将该文件作为响应复制回来。换句话说,您将拥有一个可以发布到的URL,当它在帖子的内容中看到一个文件时,它将用该文件的内容进行响应
    • 现在,您已经获得了用户可以使用文件输入选择其验证器文件并将其上载到您的服务器的所有信息,您的服务器将使用刚刚获得的文件进行响应,并且该文件将显示为iframe的内容
    • 现在,您终于有了一个文件,这个文件是您非常努力地获取的(在您的iframe中),您可以执行
      $('#thatIframe').html()
      和viola,您可以访问您的文件了。您可以保存当前页面的源代码,然后用上载的文件替换整个页面(然后将保存的页面源代码传递回新的验证程序页面),也可以对上载的验证程序文件的内容执行任何其他操作
    当然,如果文件在不同的计算机之间没有变化,您可以通过一个服务器将验证器文件发回,使所有这些都变得简单;这可能是一个没有任何逻辑的纯Apache服务器,因为它所要做的就是提供一个静态文件

    无论如何,如果您采用这种方法,并且新的文件上载脚本与起始网页不在同一服务器上,那么您将面临一个新的安全问题:跨域脚本限制。但是,这些限制远没有本地文件访问限制严格,因此有办法解决这些限制(JSONP、跨站点策略文件等)。已经有很多很棒的堆栈溢出帖子解释了这些技术,所以我不想在这里重复它们


    希望能有所帮助。

    您不希望您访问的网页能够打开
    文件:/c:/Program Files/Quicken/YourSensitiveTaxInfo
    对吗?因为如果你犯了一个错误,访问了一个“坏”网站(要么是一个劣质网站,要么是一个被黑客入侵的好网站),intarweb上的坏人会突然访问到你的私人信息。那太糟糕了

    浏览器制造商知道这一点,因此他们设置了非常严格的限制,以防止Javascript代码访问用户本地计算机上的文件。这就是阻碍你计划的原因

    解决方案

    • 将整个验证器构建到bookmarklet中(除非它非常小,否则不太可能工作)
    • 把你的验证码放到网上某个地方
    • 编写一个插件(因为用户必须选择安装插件,所以他们比网页自由得多……即使对于Firefox、Chrome等,插件基本上只是Javascript)
    **编辑**

    • 额外奖金解决方案