Javascript bookmarklet进入URL并执行

Javascript bookmarklet go to URL and execute

本文关键字:执行 URL 进入 bookmarklet Javascript      更新时间:2023-09-26

我有一个这样的javascript,用于bookmarklet:

window.location="URL"
document.getElementById('username-id').value = 'User'
document.getElementById('pwd-id').value = 'pass'
doLogin();

问题是javascript一旦到达URL就会停止。如何使其转到页面并执行脚本?

我不推荐浏览器扩展-它们允许不受信任的代码在受信任的代码上下文中运行。如果您的浏览器扩展加载页面并自动输入用户名和密码,那么如何阻止它将这些凭据发布到恶意站点呢?只有你,而且只有你仔细阅读了源代码。

为了解决上面的问题,我在我的浏览器的收藏栏中添加了bookmarklet,需要点击两次:1. 单击可导航到该位置2. 点击填写表格

javascript: 
 var L='http://mysite.com/';
 if(location!=L)location=L;
 else{
  document.getElementById('username-id').value='User'; 
  document.getElementById('pwd-id').value = 'pass';
  document.close();
  doLogin(); 
 }

祝你好运!

遗憾的是,您的书签无法工作。window.location结果加载新页面的变化-如果没有文档首先出现,您无法在该页上执行任何Javascript。

所需的操作可以通过浏览器扩展实现,例如Greasemonkey脚本,它在页面加载时在页面上执行指定的Javascript

如果你控制你正在加载的页面,我会考虑将该数据作为片段传递并从页面处理。类似于window.location="URL#username=...;password=...",而不是解析页面中片段的数据并对其进行任何需要的操作。但是,在这种特殊情况下,这不是一个好主意,因为密码将被保存在浏览历史记录中。

如果您想从加载在与目标位置相同的域(并且使用相同的方案)上的页面执行bookmarklet,您可以(某种程度上)通过将其加载到iframe中来实现。

javascript:
document.body.innerHTML = '<iframe src="http://example.com/page2.html" onload="this.contentWindow.location.assign(`javascript:
    document.body.style.textTransform = ''uppercase''; /* put code here */
void(0);`); this.onload = null;" width=100% height=100%>';

注意多行字符串使用反勾号以提高可读性。onload = null需要防止无限循环,因为onload将在位置分配javascript代码后触发。

(仅在Chrome中测试)

试着用window.onload事件来包装你的代码。

window.location = "URL"; window.onload = function() {
document.getElementById('username-id').value = 'User'
document.getElementById('pwd-id').value = 'pass'
doLogin();
}

由于上面的解决方案不起作用,您仍然应该能够编写一个简单的浏览器扩展来解决您的问题。这很简单:选择您使用的浏览器并遵循文档。这是唯一的方法。