小编Nis*_*rma的帖子

JavaScript注入和书签有什么区别吗?

根据维基百科关于Bookmarklets的文章(http://en.wikipedia.org/wiki/Bookmarklet),Bookmarklets的概念是:

Web浏览器将URI用于标记的href属性和书签.URI方案(例如http:,file:或ftp:)指定协议和字符串其余部分的格式.浏览器还实现了一个前缀javascript:对解析器来说就像任何其他URI一样.在内部,浏览器看到指定的协议是javascript,将字符串的其余部分视为JavaScript应用程序然后执行,并将结果字符串用作新页面.

它表示结果字符串用作新页面.那么这是否意味着浏览器的原始DOM不受该字符串的影响?但是,如果将结果字符串用作新页面,我如何在现有DOM中更改或注入新的DOM元素?因为脚本提醒Hello或注入一些新的DOM元素并没有真正返回任何内容.他们有点在现有的DOM上工作.

现在,在Internet Explorer中,除了使用Bookmarklets在页面上执行一些JavaScript之外,我还可以编写一个BHO插件并按以下方式注入:

        document = (HTMLDocument)webBrowser.Document; 
        var injectedJS = System.IO.File.ReadAllText("InjectedJS.js");
        var window = document.parentWindow;
        window.execScript("(function(){ " + injectedJS + " })()");
Run Code Online (Sandbox Code Playgroud)

同样在chrome中,我可以编写一个扩展来实现同样的目的:

var s = document.createElement('script');
s.src = chrome.extension.getURL("script.js");
s.onload = function() {
    this.parentNode.removeChild(this);
};
(document.head||document.documentElement).appendChild(s);
Run Code Online (Sandbox Code Playgroud)

这些有何不同?我所拥有的高级问题是:

  1. 这三种方法是否在不同的环境中执行JavaScript代码?
  2. 对于其中一个没有另外一个没有的限制吗?
  3. 执行结果呈现给用户或反映在浏览器中的方式有​​什么不同吗?
  4. "JavaScript注入"和"Bookmarklets"这两个术语之间是否有任何区别?虽然我认为JavaScript注入是一种效果而Bookmarklets是实现这一目标的一种方式,但BHO和Chrome扩展是另一种方式.
  5. 如果4中的假设是正确的,那么使用BHO的execScript方法或在浏览器中使用javascript:protocol 执行JavaScript的方式有什么不同吗?

javascript bho bookmarklet javascript-injection google-chrome-extension

10
推荐指数
1
解决办法
1979
查看次数

在Java中重置Graphics2D对象

我在Java中尝试使用Graphics2D.但像往常一样,我被困住了.:P问题是:假设我有这个代码,

Graphics2D g=(Graphics2D)(this.getGraphics()); //Inside a JFrame
g.rotate(Math.PI/8);
g.drawLine(10, 20, 65, 80);

//I want this one and all following lines to be drawn without any rotation
g.drawLine(120, 220, 625, 180);
Run Code Online (Sandbox Code Playgroud)

可能吗???我知道必须有某种方式,但我无法弄清楚.请帮忙.

java swing graphics2d

8
推荐指数
2
解决办法
6778
查看次数

触发OnlineIdConnectedStateChange后,检查用户是否已登录

我正在使用Windows 8.1 Metro应用程序.该应用程序为使用其Live帐户登录Windows的用户提供个性化体验.

如Windows中所提供的,任何用户都可以通过PC设置 - >帐户将其真实帐户连接/断开连接到PC.我的要求是在此事件中得到通知,即,每当用户将其真实账户连接/断开连接到PC时.现在,根据MSDN页面(http://msdn.microsoft.com/en-us/library/windows/apps/hh977056.aspx),此事件将触发OnlineIdConnectedStateChange.我能够在应用程序中实现一个监听触发器的后台任务,它工作得很好.每次在连接的Live帐户中发生更改时,都会触发事件侦听器.但是,如果用户使用某个真实帐户登录或从已连接的帐户注销,我无法确定这一事实.

我尝试使用Windows.Security.Authentication.OnlineId.OnlineIdAuthenticator(Metro App - 如何检测是否使用Live ID或本地帐户登录),但如果没有用户登录则会触发身份验证流程.这不是我想要的.我只是想知道有人登录或不登录的事实.我不想触发Auth流程.

在后台任务中触发OnlineIdConnectedStateChange事件时,有没有办法确定用户的登录/注销状态?

谢谢你的帮助.

c# live-connect-sdk windows-8.1

7
推荐指数
1
解决办法
814
查看次数

连续读取文件并相应地更新Python GTK应用程序

我正在开展一个手势识别项目.有一个C程序从视频输入中捕获手势并将其写入文件.现在,我有一个用Python编写的图像查看器--GTK.它根据手势切换到下一个或上一个窗口.此连续文件读取和应用程序更新定义如下:

def ai(self):
        if self.mtime!=os.stat("input.txt").st_mtime:
            self.mtime=os.stat("input.txt").st_mtime
            inp=open("input.txt", "r");
            line=inp.read()
            if len(line)!=0:
                line=line[0:len(line)-1]
                for x in line.split(' '):
                    y=x.split('-')
                    if(y[1]=="R"):
                        self.next()
                        print "Move Right"
                    elif(y[1]=="L"):
                        self.prev()
                        print "Move Left"
        time.sleep(1)
        print "WakeUp"
        self.ai()
Run Code Online (Sandbox Code Playgroud)

现在如果我在这里注释掉递归调用,那么应用程序在读取当前文件和更新图像后工作.当然,之后它不会更新.

但是如果我取消注释递归调用,那么控制台会继续工作,但是图像查看器应用程序会停止响应.

有没有办法执行此功能?任何我可以绑定此ai()函数的事件,可以在每次触发该事件时检查文件更新...任何帮助将不胜感激.

python gtk events

0
推荐指数
1
解决办法
854
查看次数