我目前正在使用 IFrame 将用户生成的内容放在沙箱中。这消除了我们主样式表的任何样式问题。
但是,当用户使用我们的富文本编辑器生成链接时,我们希望该链接在父级中打开,而不仅仅是在 IFrame 中打开该链接。我知道您可以将目标设置为父级,但我们无法控制用户以及他们在内容中输入的内容。
有没有办法劫持 IFrame 内的 HREF,以便它们都以父级为目标而不修改它们?或者使用一些可以普遍注入的 Javascript,这样我就不需要抓取所有内容并以编程方式替换目标?
理想情况下,一个简单的脚本将是最好的解决方案。
想法?
最终解决方案
我使用了我选择的答案的变体......它让我朝着正确的方向前进。
<script>
Event.observe(window, 'load', function() {
$$('a').each(function(e) {
e.writeAttribute('target', '_parent');
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
它位于包含内容的 IFrame 内。它最终成为该任务最简单的解决方案。
我一直在摆弄周围与Allen Bauer的代码的通用多播事件调度程序(见他关于它的博客文章在这里).
他提供了足够的代码让我想要使用它,不幸的是他没有发布完整的源代码.我有一个bash让它工作,但我的汇编技能是不存在的.
我的问题是InternalSetDispatcher方法.天真的方法是使用与其他InternalXXX方法相同的汇编程序:
procedure InternalSetDispatcher;
begin
XCHG EAX,[ESP]
POP EAX
POP EBP
JMP SetEventDispatcher
end;
Run Code Online (Sandbox Code Playgroud)
但这用于具有一个const参数的过程,如下所示:
procedure Add(const AMethod: T); overload;
Run Code Online (Sandbox Code Playgroud)
SetDispatcher有两个参数,一个是var:
procedure SetEventDispatcher(var ADispatcher: T; ATypeData: PTypeData);
Run Code Online (Sandbox Code Playgroud)
所以,我认为堆栈会被破坏.我知道代码在做什么(通过弹出对self的隐藏引用来清理堆栈帧从调用到InternalSetDispatcher,我假设返回地址),但我只是无法弄清楚那个小小的汇编程序来获取整个代码事情进行着.
编辑:只是为了澄清,我正在寻找的是我可以用来使InternalSetDispatcher方法工作的汇编程序,即汇编程序用两个参数清理一个过程的堆栈,一个是var.
编辑2:我已经修改了一下这个问题,感谢梅森到目前为止的答案.我应该提到上面的代码不起作用,并且当SetEventDispatcher返回时,会引发AV.
我整天都有一台笔记本电脑和5分钟的细分市场.我曾经认为这只是做"任何事情"的时间太短.虽然通过一些练习和一些轻微的行为改变(如拔出),我意识到我可以在每个细分中完成一些事情.所以现在我向所有快速绘制的程序员伸出援手,获取更多提示,让我在最短的时间内完成一些工作.
我有一个用于搜索的asp.net表单.搜索结果使用Ajax显示在同一页面上.如果我导航到另一个页面并返回,我会得到填充的表单,但搜索结果为空.返回页面并填充结果的最佳方法是什么.
或者,当单击后退按钮时,如何强制页面回发以使用结果重新填充页面?
我想知道如何使用c#在所有可能的目录中找到特定文件(例如cheese.exe)?然后将路径存储到它找到的目录中?
我有一个ScrollViewer,其中包含一个包含多个控件的Grid.用户可以通过控件进行制表,但最终它们会切换到不在视图中的控件 - 因此他们必须进行手动滚动以使控件再次可见.
有没有办法让ScrollViewer自动滚动,以便始终可以看到聚焦控件.如果失败了,有没有什么方法可以让这个工作,除了在每个控件上听一个GotFocus事件,然后滚动ScrollViewer使控件可见?
目前我正在使用Silverlight 2.
我使用UIImagePickerController 跟踪了一个很棒的教程(http://iphone.zcentric.com/2008/08/28/using-a-uiimagepickercontroller/),以便从iPhone上的相册或相机中获取图像.问题是,该教程有点过时,文档引用了委托使用的方法,因为自3.0以来已经过折旧.问题是,文档未能提供关于使用什么的线索?不推荐使用的方法是:
– imagePickerController:didFinishPickingImage:editingInfo:
Run Code Online (Sandbox Code Playgroud)
上述方法使用如下:
- (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingImage:(UIImage*)img editingInfo:(NSDictionary*)editInfo
{
image.image = img;
[[picker parentViewController] dismissModalViewControllerAnimated:YES];
}
Run Code Online (Sandbox Code Playgroud)
问题:目前使用什么代替已弃用的方法?
我有一个看似简单的问题,但找不到答案.我有一个网页,可能是由POST请求产生的,并且可能在URL中有一个锚点(#).我想在JavaScript中将此页面重新加载为GET请求.所以它与这个问题类似,但实际上我想避免POST,而不仅仅是关于它的警告.
因此,例如,如果页面来自对" http:// server/do/some?thing# " 的POST请求,我想重新加载URL" http:// server/do/some?thing "作为GET .如果我试试
window.location.reload(true);
Run Code Online (Sandbox Code Playgroud)
导致IE尝试POST.如果我改为:
window.location = window.location.href;
Run Code Online (Sandbox Code Playgroud)
当URL具有锚点时,这不起作用.我是否真的需要自己进行字符串操作以摆脱"#whatever"或者是否有更简单,"更好"的方法来做到这一点?
当点击该IFrame中的链接时,我使用IFrame查看Pdf文档.但是,在没有阅读器的计算机上,链接将提示下载.有没有办法,相同的链接可以提示用户在检测到没有读卡器时下载阅读器?我以为我在某个地方见过这个.谢谢!
这可以用来改变CSS吗?不能在w3上看到很多.任何人都知道它.
如果这个论坛/网站不是询问浏览器标准问题的地方,有人可以指出我正确的方向吗?
谢谢
- 标记
javascript ×3
ajax ×1
asp.net ×1
c# ×1
css ×1
delphi ×1
delphi-2009 ×1
deprecated ×1
detection ×1
events ×1
file ×1
filesystems ×1
generics ×1
href ×1
iframe ×1
iphone ×1
jquery ×1
pdf-viewer ×1
refresh ×1
scrollviewer ×1
search ×1
silverlight ×1
target ×1
updatepanel ×1