PhoneGap ChildBrowser执行JavaScript

问题描述:

我不知道这是否可能在phonegap childbrowser窗口内执行JavaScript,以便我们可以在phonegap应用程序下操作网站?PhoneGap ChildBrowser执行JavaScript

查看大图可以在Objective-C中创建一个函数,该函数将该JS执行到childbrowser(修改childbrowser.m和childbrowser.h文件)并创建其JS包装器,以便可以调用JS函数来执行JS里面的childbrowser。

我想让你修改ChildBrowser让我有这个功能,所以我不应该失去它。至少给我初步的步骤。

好吧我只是试过,它在一个工作。那太精彩了!我刚刚修改了PhoneGap的ChildBrowser插件,它工作。

修订

我终于得到了几分钟的时间来更新这些谁都会遇到同样的问题的答案。

ChildBrowserCommand.h

- (void) jsExec:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; 

ChildBrowserCommand.m

- (void) jsExec:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; { 
    [childBrowser executeJS:(NSString *)[arguments objectAtIndex:0]]; 
} 

ChildBrowserViewController.h

- (void)executeJS:(NSString *)js; 

ChildBrowserViewController.m

- (void) executeJS:(NSString *)js { 
    [webView stringByEvaluatingJavaScriptFromString:js]; 
} 

ChildBrowser.js

/* MIT licensed */ 
// (c) 2010 Jesse MacFadyen, Nitobi 

function ChildBrowser() 
{ 

} 

// Callback when the location of the page changes 
// called from native 
ChildBrowser._onLocationChange = function(newLoc) 
{ 
    window.plugins.childBrowser.onLocationChange(newLoc); 
} 

// Callback when the user chooses the 'Done' button 
// called from native 
ChildBrowser._onClose = function() 
{ 
    window.plugins.childBrowser.onClose(); 
} 

// Callback when the user chooses the 'open in Safari' button 
// called from native 
ChildBrowser._onOpenExternal = function() 
{ 
    window.plugins.childBrowser.onOpenExternal(); 
} 

// Pages loaded into the ChildBrowser can execute callback scripts, so be careful to 
// check location, and make sure it is a location you trust. 
// Warning ... don't exec arbitrary code, it's risky and could cause your app to fail. 
// called from native 
ChildBrowser._onJSCallback = function(js, loc) 
{ 
    // Not Implemented 
    window.plugins.childBrowser.onJSCallback(js, loc); 
} 

/* The interface that you will use to access functionality */ 

// Show a webpage, will result in a callback to onLocationChange 
ChildBrowser.prototype.showWebPage = function(loc) 
{ 
    PhoneGap.exec("ChildBrowserCommand.showWebPage",loc); 
} 

// close the browser, will NOT result in close callback 
ChildBrowser.prototype.close = function() 
{ 
    PhoneGap.exec("ChildBrowserCommand.close"); 
} 

// Not Implemented 
ChildBrowser.prototype.jsExec = function(jsString) 
{ 
    // Not Implemented!! 
    PhoneGap.exec("ChildBrowserCommand.jsExec", jsString); 
} 

// Note: this plugin does NOT install itself, call this method some time after deviceready to install it 
// it will be returned, and also available globally from window.plugins.childBrowser 
ChildBrowser.install = function() 
{ 
    if(!window.plugins) 
    { 
     window.plugins = {};  
    } 

    window.plugins.childBrowser = new ChildBrowser(); 
    return window.plugins.childBrowser; 
} 

我的全局变量。

var CB = null; 

在我的DeviceReady事件。

CB = ChildBrowser.install(); 
if (CB != null) { 
    CB.onLocationChange = onCBLocationChanged; 
} 

我可以执行任何JS到网页使用。

CB.jsExec("alert('I am from ChildBrowser!');"); 

我希望我对此的贡献能带给你笑脸。

+0

你可以分享一些你做的修改ChildBrowser插件吗? – 2011-04-24 02:29:06

+0

是的,我确定我可以分享它,但是如何? – Neutralizer 2011-04-24 13:27:49

+1

分叉GitHub项目 - http://help.github.com/fork-a-repo/ – metadaddy 2011-05-03 06:42:20