【问题标题】:Send Javascript code to browser向浏览器发送 Javascript 代码
【发布时间】:2011-02-14 13:14:06
【问题描述】:

有没有办法从 shell 将 javascript 命令发送到在浏览器中运行的开放网络?

假设我使用 Chrome 打开了 stackoverflow.com。好吧,我想发送类似的东西

alert('hi!');

来自 shell,类似于以下内容:

$ send -t Chrome -w "stackoverflow.com" -c "alert('hi!')"

我想知道这一点,因为如果我可以在 Chrome 的 javascript 控制台上编写 alert('hi!') ,我应该可以在某处进行调用,对吗?

我看过 node.js,但我认为这是不可能的,如果我错了,请告诉我。

我知道这个问题可能看起来很奇怪,但我很好奇,在此先感谢 :)

【问题讨论】:

    标签: javascript browser command-line


    【解决方案1】:

    您可以通过 jssh 扩展将 JavaScript 发送到 Firefox。

    http://www.croczilla.com/bits_and_pieces/jssh/

    这就是 Watir 测试框架用来自动化 Firefox 的方法。

    我不知道 Chrome 的等价物。

    【讨论】:

    • Watir 使用为特定浏览器创建的各种 WebDriver 有线实现。 (例如 chrome-driver)不是 SSH 仿真。
    【解决方案2】:

    对于 IE,您似乎可以使用旧的 VBScript:http://www.autohotkey.com/forum/topic7642.html

    现在使用 IE8 为我工作得很好。 :)

    编辑:打开这个问题并提醒 JS 值将此代码作为 .vbs 文件并运行它:

    Dim oIE
    
    Set oIE = CreateObject("InternetExplorer.Application")
    oIE.Visible = 1
    
    oIE.Navigate "http://stackoverflow.com/questions/4992552/send-javascript-code-to-browser/4992812"
    
    Do While (oIE.Busy)
       Wscript.Sleep 10
    Loop
    
    oIE.Navigate "javascript:alert(fkey);"
    

    【讨论】:

      【解决方案3】:

      我认为,如果您编写并安装一些可以接收您的信号的浏览器插件并完成工作,这是可能的。有趣的问题,我会跟踪它。

      【讨论】:

        【解决方案4】:

        提供这种功能完全取决于浏览器。事实上,您的问题形式甚至不是特定于浏览器的:

        我想知道这一点,因为如果我可以 [提供某种输入] 给 [一个程序] 以使其 [做某事],我应该能够通过某处的调用来做同样的事情,对吗?

        有些程序确实为脚本提供了钩子,但如果它们不提供,那么你就不走运了。当然不能保证如果您可以通过 GUI 执行某些操作,那么您可以从命令行调用触发相同的操作。

        现在大多数浏览器都提供了某种插件架构这一事实,如果基础产品中缺少此功能,则更有可能存在这样的插件以这种方式侦听外部输入。

        但是,这仍然会非常特定于您想要控制的特定型号甚至版本的浏览器 - 因此,如果您想将其发布到野外,您需要非常具体地使用您的要求。

        【讨论】:

        • 我知道,我只是想知道是否有任何现代浏览器提供这样的功能,我没有问是否有一个程序来统治它们:)
        • @Jos 好吧,Chrome 是开源的,所以你可以深入研究它的源代码,看看当用户在地址栏中输入 javascript:alert('hi!'); 时会发生什么。 :)
        • @Shadow 好吧,我正在做一些研究,但我想在这里获得一些帮助;)感谢您的评论。
        【解决方案5】:

        您可以通过地址栏向浏览器发送任意代码!例如 AutoHotKey 样式,

        send F6 //focus the address bar
        send ctrl+v  //given that your code is in clipboard
        send enter
        

        现在还有一个问题。我们能得到注入代码的返回值吗?答案是肯定的!

        将您的返回值分配给document.title,并从您的应用程序中检索窗口标题。

        如果返回值太长(例如 JSON 格式的字符串),请执行以下操作

        document.title='calculating...';
        document.title=returnValue.subString(0,20);
        sleep(10);
        document.title=returnValue.subString(20,40);
        sleep(10);
        document.title=returnValue.subString(40,60);
        ...
        document.title='finished';
        

        希望它有效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-04-07
          • 2016-04-21
          • 1970-01-01
          • 2017-04-04
          • 1970-01-01
          • 1970-01-01
          • 2012-04-08
          相关资源
          最近更新 更多