OK、調査結果:
不可能な方法:
- いくつかの永続的な関数を使用して新しいページで実行します(質問で提案したように)
- ページ全体を置き換える iframe の使用 (見苦しく、ほとんどのブラウザで禁止されています)
やり過ぎの方法:
- ブラウザプラグインを書く
- リモートページの所有者にGET引数を受け入れてもらい、あなたのために何かをしてもらいます
ユーザーの操作が必要な残りの方法 1:
(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;
?>