2012-06-29 20 views
1

我正在尝试构建一个示例书签,以抓取当前网页源代码并将其传递给验证程序。验证器不是一个在线网站,而是一大堆javascript和html文件的文件夹。我试图在javascript bookmarklet代码的帮助下打开file:/// C:/Users/Electrifyings/Desktop/Validator/Main.html文件,并将源代码放在新打开的窗口的textarea中,但它是不工作的原因,我不知道。使用Javascript打开当前窗口中的本地html文件Bookmarklet

下面是示例代码算法:

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 64位,试了IE,Firefox和Chrome。所有最新和稳定的版本。我想这不是一个浏览器端的问题,但与JavaScript代码相关的东西不打开与file:///协议的URI。让我知道是否需要更多细节。 :)

回答

1

你不想让你访问的网页能打开file://c:/Program Files/Quicken/YourSensitiveTaxInfo对不对?因为如果你犯了一个错误,去一个“不好的”网站(不论是低俗的还是被黑客入侵的好的网站),在这个网页上的邪恶的人会突然访问你的私人信息。这将吸引。

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

解决方案?

  • 构建整个验证到书签(不可能奏效,除非它真的很小)
  • 把你的验证码会在网络上的某个地方
  • 编写一个插件(因为用户必须选择安装一个插件,他们得到比网页更自由......即使对于火狐,Chrome等插件基本上只是JavaScript)的

* *编辑*

  • 额外奖金方案,如果你不限制自己一个纯粹的,客户端实现:
    1. 让你的书签正常(HTML)的形式添加到页面。
    2. 同时添加的iframe页面(它的确定,如果你用CSS样式隐藏)
    3. 设置窗体的target属性指向IFRAME。这将使得当用户提交表单并且服务器回复该提交时,服务器的回复将转到(隐藏的)iframe,而不是像通常那样替换页面。
    4. 添加文件输入到你的表单 - 您将无法访问使用该Java脚本输入内的文件,但没关系,因为你的服务器会做访问,不是你的书签。
    5. 编写一个接受表单提交的服务器端脚本,读取它附带的文件,然后将该文件鹦鹉作为响应。换句话说,您将拥有一个可以发布到的URL,并且当它在POST的内容中看到一个文件时,它将回应该文件的内容。
    6. 现在,你已经得到了所有用户可以使用文件输入接他们的验证文件,将其上传到服务器,服务器将进行回应与它刚刚得到的文件,而该文件将显示为内容iframe。
    7. 而现在,你终于有你辛辛苦苦得到(你的iframe中),你可以做$('#thatIframe').html()和中提琴的文件,您可以访问您的文件。您可以保存当前页面的源代码,然后用上传的文件替换整个页面(然后将保存的页面源代码传回新的验证程序页面),或者您可以对上传的验证程序文件的内容进行任何其他操作。

当然,如果文件不从计算机到计算机不同,您可以通过只具有发送验证文件后面的服务器做了这一切简单;这可能是一个纯粹的Apache服务器,没有任何逻辑,因为它所要做的就是提供一个静态文件。无论哪种方式,如果您使用这种方法,并且您的新文件上传脚本是而不是与您的起始网页位于同一台服务器上,那么您将遇到一个新的安全问题:跨域脚本限制。但是,这些限制比本地文件访问限制要严格得多,所以有办法解决它们(JSONP,跨站点策略文件等)。已经有很多Stack Overflow的帖子解释了这些技术,所以我不打扰他们在这里重复。

希望有所帮助。

+0

谢谢,我有点知道,浏览器将不会让我去的文件:从http ///页://由于安全原因页。所以我正在考虑从小书签中的JavaScript代码向当前网页添加小型HTML覆盖窗口。这个小的HTML覆盖将允许询问用户他是否想验证该文件,并且我认为浏览器在获得用户发起的操作输入(例如点击)后重定向到本地文件没有问题。这是可能的还是正确的解决方案? – Electrifyings

+0

如果是的话,你可以给我一个示例代码来做到这一点,因特网上的所有示例代码都使用CSS,所以不知道如何添加到当前打开的网页并实现HTML覆盖。希望你明白我的意思。 :-) – Electrifyings

+0

我不相信那会奏效。为了澄清,限制是这样的:浏览器永远不会让Javascript代码(除非它在一个插件中)启动本地文件访问。然而,它将允许纯粹由用户启动的文件访问。在实践中,这会杀死你的想法,因为虽然点击事件本身是用户发起的操作,但它的处理程序只是Javascript代码;你无法对这个处理程序做任何事情,而你在非处理程序JS中无法做到这一点。 – machineghost

相关问题