OK,研究结果:
不可能的方法:
- 使用一些持久性功能在新页面上运行(就像我在问题中建议的那样)
- 使用 iframe 替换整个页面(丑陋且被大多数浏览器禁止)
矫枉过正的方法:
- 写一个浏览器插件
- 让远程页面所有者接受一些 GET 参数并为你做这些事情
剩下的方法一,需要用户交互:
(function(){
if(self.location.href!=targetlocation){
window.alert("Please run this bookmarklet again upon loading the page.");
self.location.href=targetlocation;
}else{
doSomething();
}
return false;
})();
剩下的方法2,做一些讨厌的代理的东西:
- 编写一些 php/etc 脚本来“代理”目标页面
- 现在你可以:
- 使用 iframe,因为它不再是跨站点的
- 在交付给浏览器之前重写页面服务器端(自己做“矫枉过正的方法:GET参数”)
例子:
<?php //USAGE: ?uri=http://www.google.com&search[0]=L2dvb2dsZS8K&replace[0]=dGVzdAo=
$page=file_get_contents($_GET["uri"]);
$count = min(count($_GET["search"]),count($_GET["replace"]),100);
for ($i = 0; $i < $count; $i++) {
$page=preg_replace(base64_decode($_GET["search"][$i]),
base64_decode($_GET["replace"][$i]), $page);
}
echo $page;
?>