【问题标题】:Does userscript work for a localhost html file用户脚本是否适用于 localhost html 文件
【发布时间】:2012-04-17 12:25:59
【问题描述】:

我有一个 html 文件,即“http://localhost:8084/WebApplication1/example.html

这个文件有以下内容

<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div>HELLO WORLD</div>
<script type="text/javascript">
    var f = document.createElement("div");
    f.innerHTML="sfsdfsdfsdfsdf";
    document.body.insertBefore(f, document.body.firstChild);
    document.write("<a href='http://www.google.com'>sada</a> ");
   console.log("Program")
</script>
</body>
</html>

当我使用此页面中提到的here 的用户脚本时,它没有显示创建的 div 标记。这是我的本地主机的问题吗

我写的用户脚本取自LINK --- PLEASE GO THROUGH THIS,你会发现addJS_Node函数

【问题讨论】:

  • 你的用户脚本有@include http://localhost:8084/ 行吗?

标签: javascript dom userscripts


【解决方案1】:

这样做:

<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <div>HELLO WORLD</div>
    <script type="text/javascript">
        var f = document.createElement("div");
        f.innerHTML="sfsdfsdfsdfsdf";
        document.body.insertBefore(f, document.body.firstChild);
        document.write("<a href='http://www.google.com'>sada</a> ");
        //document.body.innerHTML="<a href='http://www.google.com'>sada</a> ";
    </script>
</body>
</html>

您需要在某处插入新创建的元素,即在 body 元素内部。所以我不得不把剧本往下移一点,这样身体就存在了。另请注意,我用 innerHTML 属性注释掉了您的行,以不覆盖 body 标记中已有的内容。

它将在本地主机上运行,​​因为您的问题与本地运行之间没有联系。

【讨论】:

  • 我试过上面的代码,但不幸的是它不适合我
  • 我认为用户脚本中的脚本是在脚本之后添加的,这就是为什么 document.createElement 的钩子不起作用即使我在用户脚本中提到 // @run-at document-start 但是脚本最后被添加,任何人都可以解决这个问题
  • 不,脚本是之前添加的,从浏览器中的页面代码可以看出。只需要几分之一秒的时间就可以生效,到那时,一些后续的 JS 已经执行了。
  • 你是如何尝试这段代码的,它不起作用?你是用它作为独立的 html 文件,还是把它粘贴到现有的文件中?
  • 我将此代码粘贴到现有代码中。我通过在脚本标签中放置console.log("program"); 和在用户脚本中放置console.log("userscript"); 来测试它;程序首先在控制台中打印,而不是用户脚本,因此我得出的结论是 html 文件中的脚本比用户脚本首先执行
【解决方案2】:

除了the issues that Carlos pointed out 之外,该代码似乎还不够快,无法在一个简单的本地页面上捕获所有内容。对于那个很抱歉。当我测试它时,我使用了我的测试服务器。

如果您将脚本指向Carlos's version of the test page, hosted at jsBin,则脚本会在这种情况下捕获createElement() 调用。

这是一场比赛,而这正是 Greasemonkey 所能做的最好的事情。正如already stated (7th comment down) 一样,Greasemonkey 并不是您想要完成的工作的最佳工具。

【讨论】:

  • 我没有得到 Carlos 版本的测试页的输出。请告诉我你是怎么得到它的。
  • 我很抱歉。我再次检查(使用较新版本的 FF 和 GM),脚本仅显示在 DOMContentLoaded 事件之后添加的标签。再次重申,GREASEMONKEY 不是您所需任务的正确工具。
  • 那么我们如何添加脚本作为 ff 或 chrome 的扩展。我们考虑使用用户脚本,因为它有 //@run-at document-start 但现在这不起作用我们如何实现这一点。请帮助我们
  • 感谢您理解问题
  • 这不是一个小问题。请参阅“document_start” for Firefox addon? 和链接的帖子,了解解决方案的第一部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多