1

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

这是带有算法的示例代码:

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

以下是步骤:

  1. 在变量中获取当前网页源代码。
  2. 在当前或新窗口或新选项卡中打开本地存储的 HTML 网页(无论哪种方式都适合我,但没有运气)
  3. 将变量中的源代码放入新打开的 HTML 文件的验证器文本区域。

我已经尝试了上面的代码有很多变化,但是卡在了它打开新窗口的部分。要么根本没有打开新窗口,要么在不加载文件的情况下打开空白窗口。

很想在这个问题上得到一些帮助,非常感谢。

哦,顺便说一句,

Windows 7 x64,尝试过 IE、Firefox 和 Chrome。所有最新和稳定的版本。我想这不是浏览器方面的问题,而是与 javascript 代码相关的问题,而不是使用 file:/// 协议打开 URI。让我知道是否需要更多详细信息。:)

4

1 回答 1

1

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

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

解决方案?

  • 将整个验证器构建到书签中(除非它真的很小,否则不太可能工作)
  • 将您的验证器代码放在网络上的某个地方
  • 写一个插件(因为用户必须选择安装一个插件,他们比网页获得更多的自由......即使对于Firefox,Chrome等插件基本上只是Javascript)

* * 编辑 * *

  • 额外的奖励解决方案,如果您不将自己限制为纯客户端实现:
    1. 让您的小书签向页面添加一个普通 (HTML) 表单。
    2. 还要在页面中添加一个 iframe(如果你用 CSS 样式隐藏它就可以了)
    3. 将表单的目标属性设置为指向 iframe。这样一来,当用户提交表单并且服务器回复该提交时,服务器的回复将转到(隐藏的)iframe,而不是像通常那样替换页面。
    4. 将文件输入添加到您的表单 - 您将无法使用 Javascript 访问该输入中的文件,但这没关系,因为您的服务器将进行访问,而不是您的书签。
    5. 编写一个服务器端脚本,该脚本接受表单提交,读取随附的文件,然后将该文件作为响应复制回来。换句话说,您将拥有一个可以 POST 到的 URL,当它在 POST 的内容中看到一个文件时,它会以该文件的内容进行响应。
    6. 现在您已经获得了用户可以使用文件输入选择他们的验证器文件的所有内容,将其上传到您的服务器,您的服务器将返回它刚刚获得的文件,并且该文件将显示为 iframe 的内容。
    7. 现在您终于拥有了您努力获得的文件(在您的 iframe 中)$('#thatIframe').html(),您可以使用 viola 来访问您的文件。您可以保存当前页面的源代码,然后用上传的文件替换整个页面(然后将保存的页面源代码传递回新的验证器页面),或者您可以对上传的验证器文件的内容执行任何其他操作。

当然,如果文件在不同计算机之间没有变化,那么您可以通过一个服务器将验证器文件发回,从而使这一切变得更简单这可能是一个没有任何逻辑的纯 Apache 服务器,因为它所要做的就是提供一个静态文件。

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

希望有帮助。

于 2012-06-29T17:08:35.317 回答