你有HTML
这样:
<form action="frame.html" target="frame1"><input type="submit"></form>
<iframe name="frame1" id="frame1" src="frame.html"></iframe>
它可以很好地重新加载帧(在生产代码的情况下发送一些发布数据)。但是,如果在 frame.html 中有一个代码定义全局变量&#34; name&#34; ,则代码会中断并打开 frame.html 在新标签中。
var name = "a";
在 Chrome 和 Firefox 中的工作方式相同。
以下是github.io上的示例:
https://jsfiddle.net/hyk18g88/2/
来源:http://evigl.github.io/form-target-iframe-test/
(第一帧是正常工作帧,第二帧是打开新窗口,为了清晰起见,有几个console.log&#39;
很奇怪,是吧?即使 frame.html 在另一个域上,它的工作方式也相同。它不会违反同源政策吗?
有没有办法覆盖这种行为?我在框架内部有一些不受控制的代码(用户生成的代码预览),更改它不是一个选项。它也在另一个领域。
答案 0 :(得分:2)
很奇怪,是吗?
是。它是早期DOM设计的结果,它一直保持向后兼容性(因为浏览器不会丢弃网站可能仍然使用的任何可怕的东西)。
它是否违反了同源政策?
没有。 JS并不是读任何来源的东西。
有没有办法覆盖这种行为?
不是真的。您可以使用public class Solution {
// DO NOT MODIFY THE LIST
public ArrayList<Integer> spiralOrder(final List<ArrayList<Integer>> a) {
ArrayList<Integer> result = new ArrayList<Integer>();
// Populate result;
/*
* m=no. of rows, n=no. of cols, t=top row of untraversed list, b=bottom
* row of untraversed list, l=left most col of untraversed list and
* r=right most col of untraversed list
*/
int m = a.size();
int n = a.get(0).size();
int dir = 0;
int t = 0;
int b = m - 1;
int l = 0;
int r = n - 1;
while (l <= r && t <= b) {
if (dir == 0) {
for (int i = l; i <= r; i++) {
result.add(a.get(t).get(i));
dir = 1;
t++;
}
} else if (dir == 1) {
for (int i = t; i <= b; i++) {
result.add(a.get(i).get(r));
dir = 2;
r--;
}
} else if (dir == 2) {
for (int i = r; i >= l; i--) {
result.add(a.get(b).get(i));
dir = 3;
b--;
}
} else if (dir == 3) {
for (int i = b; i >= b; i++) {
result.add(a.get(i).get(l));
dir = 0;
l++;
}
}
}
return result;
}
}
使用JS为框架指定新的getElementById
来破解它(我不知道链接到框架内的新页面是否会破坏该框架),或者完全摧毁框架并用新框架替换它(也用JS)。