"把这个2008年的报表系统迁移到新浏览器!" —— 当我听到这个需求时,显示器里的IE6图标流下了两行像素泪。
// 试图在现代浏览器召唤神龙时
try {
URL url = new URL("http://modern.com");
getAppletContext().showDocument(url); // 此处应有掌声,但...
} catch (MalformedURLException e) {
// 意外收获:SecurityException大礼包
}
报错三连:
SecurityException: 不允许的跨域请求
浏览器:这是啥?不认识!(404 Not Found)
用户:小老弟,你确定这是2024年的代码?
# 创建安全策略文件java.policy
grant {
permission java.net.SocketPermission "*", "connect";
permission java.lang.RuntimePermission "accessDeclaredMembers";
};
操作警告:此步骤可能导致安全工程师提着40米大刀赶来
// 在Applet中开启虫洞
public void init() {
try {
URL target = new URL(getParameter("secretUrl"));
getAppletContext().showDocument(target, "_blank"); // 在新窗口打开
} catch (Exception e) {
// 此处适合播放《凉凉》
}
}
public void showDocument(URL url) {
// 实现原理:向浏览器发送一个穿越时空的漂流瓶
browser.sendTimeCapsule(url);
}
参数格式 | 效果 | 现代替代方案 |
---|---|---|
"_self" | 当前窗口打开 | window.location.href |
"_blank" | 新窗口打开 | window.open() |
"_parent" | 父框架打开 | iframe嵌套 |
浏览器 | 生存概率 | 抢救建议 |
---|---|---|
IE 6 | 99% | 联系微软博物馆 |
Chrome 120+ | 0% | 建议转行 |
Firefox Quantum | 0.01% | 祈祷时记得烧香 |
不要相信showDocument():它比初恋还不靠谱
Applet已入土:Oracle官方死亡证明日期2015年
向前看:用JavaScript的window.open()
实现类似功能
需求 | 石器时代方案 | 现代文明方案 |
---|---|---|
页面跳转 | showDocument() | 前端路由 |
跨域通信 | 安全策略放行 | CORS配置 |
弹窗控制 | Applet参数 | window.open()选项 |
showDocument()
是Applet控制浏览器的“核武器”,但需注意:
彩蛋:尝试在target参数传入“_top”,看看页面会不会“炸”到顶层窗口!