Дочерний браузер PhoneGap, выполняющий JavaScript

#iphone #browser #cordova

#iPhone #браузер #кордова

Вопрос:

Интересно, возможно ли выполнить JavaScript внутри окна дочернего браузера phonegap, чтобы мы могли управлять веб-сайтами в приложении phonegap?

Рассматривая общую картину, можно создать функцию в Objective-C, которая выполняет этот JS в childbrowser (изменяя файлы childbrowser.m и childbrowser.h) и создать для нее JS-оболочку, чтобы можно было вызывать JS-функцию для выполнения JS внутри childbrowser.

Я хочу, чтобы вы модифицировали дочерний браузер для меня, чтобы у меня была эта функциональность, чтобы я не терял ее при выполнении. По крайней мере, дайте мне начальные шаги.

Ответ №1:

Хорошо, я просто попробовал, и это сработало за один раз. Это было потрясающе! Я только что модифицировал плагин дочернего браузера PhoneGap, и это сработало.

ОБНОВЛЕНО

У меня наконец-то появилось несколько минут, чтобы обновить ответ для тех, кто столкнется с такой же проблемой.

Дочерняя браузерная команда.h

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

Дочерняя браузерная команда.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!');");
  

Я надеюсь, что мой вклад в это вызовет улыбку на вашем лице.

Комментарии:

1. Не могли бы вы поделиться некоторыми из того, что вы сделали для модификации плагина дочернего браузера?

2. Да, конечно, я могу поделиться этим, но как?

3. На самом деле я готов поделиться, потому что это действительно приятно, когда ты можешь помочь другим, но проблема в том, что я не умею обращаться с Git, и я новичок в этом. Есть ли руководство для этого?

4. Я использовал Git раньше, но использовал старый школьный метод, такой как «попробуйте и потерпите неудачу». Я хотел изучить Git профессиональным способом, поскольку пока у меня это получается. По крайней мере, теперь я понимаю, как это работает. Скоро я опубликую многие свои материалы, которые просто лежат на моем жестком диске.