我正在尝试构建一个示例bookmarklet来获取当前网页源代码并将其传递给验证器。 Validator不是一个在线网站,而是一个包含大量javascript和html文件的文件夹。我试图在javascript bookmarklet代码的帮助下打开file:/// C:/Users/Electrifyings/Desktop/Validator/Main.html文件,并将源代码放在新打开的窗口的textarea中,但它是由于某些我不知道的原因而无法工作。
以下是带算法的示例代码:
javascript:(function(){var t = document.body.innerHTML;window.open('file:///C:/Users/RandomHero/Desktop/test.html',_self);document.getElementById("validator_textarea")=t;})()
以下是步骤:
我尝试了上面的代码有很多变化,但是它被卡在打开新窗口的部分。要么它根本没有打开新窗口,要么在没有加载文件的情况下打开空白窗口。
很想得到这个问题的帮助,非常感谢。
哦,顺便说一句,
Windows 7 x64,尝试IE,Firefox和Chrome。所有最新和稳定的版本。我想这不是浏览器方面的问题,而是与javascript代码相关的东西没有用file:/// protocol打开URI。如果需要更多细节,请与我们联系。 :)
答案 0 :(得分:1)
您不希望自己访问的网页能够正常打开file://c:/Program Files/Quicken/YourSensitiveTaxInfo
吗?因为如果你犯了一个错误并去了一个“坏”的网站(或者是一个被黑客攻陷的好网站),那么intarweb上的邪恶的人会突然获得你的私人信息。那太糟糕了。
浏览器制造商知道这一点,因此他们提出了非常严格的限制,以防止Javascript代码访问用户本地计算机上的文件。这就是妨碍你的计划。
解决方案?
* *编辑* *
$('#thatIframe').html()
和中提琴,您可以访问您的文件。您可以保存当前页面的源,然后用该上载的文件替换整个页面(然后将保存的页面源传递回新的验证器页面),或者您可以使用上载的验证器文件的内容执行任何其他操作。 当然,如果文件在不同计算机之间不同,只需让服务器发送验证器文件,就可以使所有更多更简单;这可能是一个没有任何逻辑的纯Apache服务器,因为它所要做的就是提供一个静态文件。
无论哪种方式,如果你采用这种方法,并且你的新文件上传脚本不与你的起始网页在同一台服务器上,你将遇到一个新的安全问题:跨域脚本限制。但是,这些限制远不如本地文件访问限制那么严格,因此有办法解决它们(JSONP,跨站点策略文件等)。已经有很多很棒的Stack Overflow帖子解释了这些技术,所以我不打算在这里重复它们。
希望有所帮助。