我想从javascript打开另一个网页(如默认导航,而不是全屏iframe或window.open)并在加载时运行一些javascript代码。
步骤:
有没有办法实现这个目标?我记得的唯一方法是通过使用ajax加载页面并替换document.body.innerHtml然后运行该函数来模拟这个,但这不会改变location.href,例如后退按钮或书签不起作用。还有相关链接必须在加载等时重写......
PS:我知道这将是一些丑陋的XSS,但是在编写加载页面并自动填写表单的bookmarklet时需要它。
答案 0 :(得分:2)
不,你不能这样做。这将允许你做一些事情,比如在幕后偷取会话劫持的cookie,所以没有任何浏览器允许你这样做。
答案 1 :(得分:1)
虽然可能存在一些合法用例,但出于安全原因,除非新页面位于同一域中,否则无法执行此操作。
如果目标浏览器具有扩展支持,您可以做的是编写浏览器扩展,
或告诉用户打开目标页面,并在该上下文中使用您的书签。
答案 2 :(得分:1)
如果您从自己的服务器加载其他页面,则可以执行所有这些操作:
假设您要在网站http://other.com中加载http://mine.org 你写了一个小的服务器端脚本,你可以像这样调用: http://mine.org/load.php?site1(包含您所有网站的网址 想要加载load.php或某些数据库中列出的内容)
但现在您的网站存在安全问题:嵌入了javascript http://other.com在您的网站上下文中运行。
答案 3 :(得分:0)
好的,研究结果:
不可能的方法:
矫枉过正方法:
剩余方法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 //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;
?>