在用户脚本的上下文中,例如由 Tampermonkey 执行,是否可以在不同域的两个页面之间进行通信,将“X-Frame-Options”设置为“SAMEORIGIN”?
我知道 this way通过使用 iFrame 和 postMessage 将消息从一个页面发送到另一个页面,但是在使用您无法控制的网站时,例如在我的情况下 Stack Overflow 和 Google(正在开发一个机器人来为我自己自动化一些东西),尝试创建 iFrame 时,您会收到 SAMEORIGIN 错误。
但我认为,由于我能够在两个页面中插入脚本,因此可能会采取一些变通方法或替代解决方案。
一个建议,一个shared worker看起来很有希望,但似乎要求页面来自同一来源。我还看了 Broadcast Channel API spec,但它还没有在任何地方实现,而且它似乎也被绑定(bind)到同源策略。
到目前为止在评论中提到的另一个建议的可能性是使用 GM API因为这是一个用户脚本(扩展/特殊 JS 功能)。用GM_xmlhttpRequest我们可以忽略跨域限制,加载google.com,然后放到一个iframe中,但是所有的源都会指向嵌入iframe的站点,所以搜索Google 页面尝试在父站点的域上执行搜索参数。
GM_xmlhttpRequest({
method: "GET",
url: "https://www.google.com",
headers: {
"User-Agent": "Mozilla/5.0",
"Accept": "text/xml"
},
onload: function(response) {
$('html').html('<iframe id="iframe"></iframe>');
$("#iframe").contents().find('html').html(response.responseText);
});
也许我可以编辑搜索请求以专门指向 google.com,而不是让搜索采用父页面的域。如果由于同源策略挂断而失败,我什至可以尝试用 GM_xmlhttpRequest 替换 Google 的 xmlhttpRequest,但我不确定是否这是可以做到的,因为如果您加载 GM 函数,用户脚本将在沙箱中运行,如果我理解正确的话,将无法与页面脚本交织在一起。我只是不确定。
另一方面,如果我们可以欺骗 iframe 的 内容,将 google.com 视为请求的域,虽然我们在做生意,但例子不这种事情似乎不存在,所以我很难弄清楚如何实现它。
最佳答案
是的,有可能,通过 2 条路线:
GM_xmlhttpRequest,我们可以发送忽略同源策略的请求,允许我们在 iFrame 中加载第三方页面,允许框架之间通过 postMessage 进行通信。这样做的好处是没有页面重新加载,但坏处是,您必须动态修改框架的 native xmlhttpRequest 以执行 GM_xmlhttpRequest 并指定完整目标URL,而不只是一个路径,例如 /example.js,否则外部窗口的域将用于内部框架发出的任何请求。关于javascript - 是否可以使用用户脚本在将 'X-Frame-Options' 设置为 'SAMEORIGIN' 的页面(选项卡)之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38691034/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳