精华内容
下载资源
问答
  • .jsxcode交互

    千次阅读 2016-03-22 15:38:22
    首先我们创建一个 XCode 项目 将 Webview 拖入 View Controller 中 打开 ViewController.h 新建一个 WebController Interface 继承 NSObject #import @interface WebController : NSObj

    本文为您图文演示如何在 OC 中注册或运行 JS 函数,以实现网页与程序的交互。

    首先我们创建一个 XCode 项目

    将 Webview 拖入 View Controller 中

    打开 ViewController.h 新建一个 WebController Interface 继承 NSObject

     #import <WebKit/WebKit.h>
    
     @interface WebController : NSObject
    {
        IBOutlet WebView* webView;
    }
    @end
    


    在项目中添加 Webkit.framework 的引用

    将一个 Object 拖拽至 ViewController 并填写其 Class 属性为 WebController


    右键点击 WebController 并将 webView 关联起来

    接下来就是关键代码 实现 WebController

    @implementation WebController
    
    +(NSString*)webScriptNameForSelector:(SEL)sel
    {
        if(sel == @selector(Writelog:)) //JS对应的本地函数
            return @"log"; // 要注册的JS函数名
        else if(sel == @selector(alert:))
            return @"alert";
        return nil;
    }
    
    + (BOOL)isSelectorExcludedFromWebScript:(SEL)sel
    {
        if(sel == @selector(Writelog:))//JS对应的本地函数
            return NO; 
        else if(sel == @selector(alert:))
            return NO;
        return YES; //返回 YES 表示函数被排除,不会在网页上注册
    }
    
    - (void)awakeFromNib //当 WebContoller 加载完成后执行的动作
    {
        [webView setFrameLoadDelegate:self];
    
        [[webView mainFrame] loadHTMLString:@"<button onclick=\"window.external.alert('This is an alert!!');\">Alert</button> <button onclick=\"window.external.log('lllllaaaa');\">Log</button>" baseURL:nil];
        //网页内容,两个按钮 一个弹出消息框,一个在控制台 Log
    
        // webView.mainFrameURL = @"http://someurl"; 加载网页
    }
    
    - (void)Writelog:(NSString*) txt
    {
        NSLog(@"Log:%@",txt);
    }
    
    - (void)alert:(NSString*) txt
    {
        NSAlert *alert = [[NSAlert alloc] init];
        [alert setAlertStyle:NSInformationalAlertStyle];
        [alert setMessageText:@"来自网页的消息"];
        [alert setInformativeText:txt];
        [alert runModal];
    }
    
    - (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)windowScriptObject forFrame:(WebFrame *)frame //网页加载完成后发生的动作
    {
        [windowScriptObject setValue:self forKeyPath:@"window.external"]; // 注册一个 window.external 的 Javascript 类
    }
    
    
    @end
    

    然后点击运行按钮 出现应用主界面并自动加载网页内容,此时我们点击 Log 就会在控制台输出数据,点击 Alert 按钮就会弹出提示框。


    很多关于objc 与 js 交互的文章都比较适用于 mac开发,iOS的webview 还是有所不一样,
    本文提供了一个很好解决UIWebView内js和objc交互的思路。
    自然,从oc到js,可以使用stringByEvaluatingJavaScriptFromString: 来实现。
    从js到oc,采用比较巧妙的设计,UIWebView浏览器拦截url请求,自定义url的方式拦截交互请。
    -------------------------------------------------
    -------------------------------------------------

    UIWebView是IOSSDK中渲染网面的控件,在显示网页的时候,我们可以hack网页然后显示想显示的内容。其中就要用到javascript的知识,而UIWebView与javascript交互的方法就是stringByEvaluatingJavaScriptFromString:

    有了这个方法我们可以通过objc调用javascript,可以注入javascript。

    首先我们来看一下,如何调用javascript:

    1. [webView stringByEvaluatingJavaScriptFromString:@"myFunction();"]; 
    这儿myFunction()就是我们的javascript方法。

     

    再来看看入何注入javascript,我们先写一个需要注入的javascript:

    1. function showAlert() {  
    2.     alert('in show alert');  
    3. }  
    保存为test.js,然后拖到xcode的resource分组下。再用代码在初始化的时候注入这个js(如在viewDidLoad方法里)。
    1. NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"js"];  
    2. NSString *jsString = [[NSString alloc] initWithContentsOfFile:filePath];  
    3. [webView stringByEvaluatingJavaScriptFromString:jsString]; 
    这样就注入了上面的js,那么我们可以随时调用js的方法,如何调用,上面有介绍。

      

    那么我们能不能通过js来调用objc的方法呢。当然可以,原理就是利用UIWebView重定向请求,传一些命令到我们的UIWebView,在UIWebView的delegate的方法中接收这些命令,并根据命令执行相应的objc方法。这样就相当于在javascript中调用objc的方法。说起来有点抽象,看看代码一下就明白。

    首先我们写一个javascript 方法如下:

    [javascript] 
    1. function sendCommand(cmd,param){  
    2.     var url="testapp:"+cmd+":"+param;  
    3.     document.location = url;  
    4. }  
    5. function clickLink(){  
    6.     sendCommand("alert","你好吗?");  
    7. }  

    然后在你的html里调用这个js方法如: 

    [javascript] 
    1. "button" value="Click me!" οnclick="clickLink()" />
        

    最后我们在UIWebVew中截获这个重定向请求:
    1. #pragma mark --   
    2. #pragma mark UIWebViewDelegate   
    3.   
    4. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {  
    5.       
    6.     NSString *requestString = [[request URL] absoluteString];  
    7.     NSArray *components = [requestString componentsSeparatedByString:@":"];  
    8.     if ([components count] > 1 && [(NSString *)[components objectAtIndex:0] isEqualToString:@"testapp"]) {  
    9.         if([(NSString *)[components objectAtIndex:1] isEqualToString:@"alert"])   
    10.         {  
    11.             UIAlertView *alert = [[UIAlertView alloc]   
    12.                                   initWithTitle:@"Alert from Cocoa Touch" message:[components objectAtIndex:2]  
    13.                                   delegate:self cancelButtonTitle:nil  
    14.                                   otherButtonTitles:@"OK", nil];  
    15.             [alert show];  
    16.         }  
    17.         return NO;  
    18.     }  
    19.     return YES;  
    20. }  

     


     不过有一个开源工程大家可以看看,它允许javascript调用objective_c的方法。叫

    jsbridge-to-cocoa  http://code.google.com/p/jsbridge-to-cocoa/

    还有两个相关工程

    WebViewJavascriptBridge 与 GAJavaScript 值得大家慢慢研究。

     

    其他

    插入js代码

    上面的功能我们可以封装到一个js函数中,将这个函数插入到页面上执行,代码如下:

    if([title compare: @"Google"]==NSOrderedSame ){ 
    [webView stringByEvaluatingJavaScriptFromString:@"var script =document_createElement_x_x('script');" 
    "script.type = 'text/javascript';" 
    "script.text = "function myFunction() { " 
    "var field =document.getElementsByName('q')[0];" 
    "field.value='朱祁林';" 
    "document.forms[0].submit();" 
    "}";" 
    "document.getElementsByTagName_r('head')[0].a(script);"]; 
    [webViewstringByEvaluatingJavaScriptFromString:@"myFunction();"]; 
    }

    看上面的代码:

    a、首先通过js创建一个script的标签,type为'text/javascript'。

    b、然后在这个标签中插入一段字符串,这段字符串就是一个函数:myFunction,这个函数实现google自动搜索关键字的功能。

    c、然后使用stringByEvaluatingJavaScriptFromString执行myFunction函数。

     

    1. 一般调用

    将本地数据,封装,直接作为JS的返回值。如:获取软件的APPCode

    //获取APPCode

     NSArray*_plist_paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
     NSString*_plist_paths_path=[_plist_paths objectAtIndex:0];
     NSArray *_plist_array= [_plist_paths_pathcomponentsSeparatedByString:@"/"];
     NSString *_appcode=[[NSString alloc]init];
     for (NSString *item in _plist_array) {
      if ([item length]==36) {
       _appcode=item;
       break;
      }
     }
     NSLog(@"current appcode:%@",_appcode);

    //注入到js中
     NSMutableString *_getApkCode=[[NSMutableStringalloc]init];
     [_getApkCode appendFormat:@"function  _getApkCode(){"];
     [_getApkCodeappendFormat:@"return '%@';",_appcode];
     [_getApkCode appendString:@" }"];
     [self.webViewstringByEvaluatingJavaScriptFromString:_getApkCode];
     [_getApkCode release];

    2.需要跟平台进行交互调用

    思路:

    1.制造含有一定含义的请求如:(location.href="download");

    2.在方法:-(BOOL)webView:(UIWebView *)webViewshouldStartLoadWithRequest:(NSURLRequest *)requestnavigationType:(UIWebViewNavigationType)navigationType中,拦截:

    //testMall:http://192.168.1.20:8083本地测试页面地址

    NSString*pre_download=[NSString stringWithFormat:@"%@downLoad",testMall];
     if([url hasPrefix:pre_download])
     { 

    //下载代码。。。。

    }

    3. 注意事项

    a.存在Iframe嵌套的页面,js注入

    页面注入JS是注入到,浏览器的html中,对于内部嵌套iframe框架的页面,则无法调用到js。此时相当于调用父页面的JS。

    可以通过parent+方法名,来调用你注入的JS。parent.parent的使用个数,可以是多个,不影响js的执行,如果少用parent,可能会导致,调不到你注入的JS

    b.存在交互的处理方法。推荐使用方法,iphone只负责提供js接口,不调用html内部或其他的js接口

      

    示例:

    html

    functionaddDownload()

    {

    url='www.XXX.XXX.zip';

    download(url);//调用iphone提供的js接口

    addDownloadTask_ret();//获取iphone下载接口执行的下载结果,此处调的是本地的一个延迟方法

    }

    //获取iphone下载接口执行的下载结果

    functionaddDownloadTask_ret()
    {

    varobj=getDownloadTaskResult();//此处为iphone提供的接口,负责返回当前下载执行情况的结果if(''!=obj||undefined!=obj)

    {

    //调用本地的一些后续处理方法。

    }

    else

    {

    setTimeout("addDownloadTask_ret2();",1000);

    }

    } 
     




    展开全文
  • 一个本地的html文件,作为webView的模板两张loading图片,在图片未加载的时候进行占位jquery.js,scrollLoading.js 也是本地的,实现滚动加载图片功能 然后就开始了漫长的Google历程。 在webView中引入本地的html...

    项目需求

    最近开发的项目,需要一个webView,同时这个webView会需要引入一些项目中的资源:

    • 一个本地的html文件,作为webView的模板
    • 两张loading图片,在图片未加载的时候进行占位
    • jquery.js,scrollLoading.js 也是本地的,实现滚动加载图片功能

    然后就开始了漫长的Google历程。

    在webView中引入本地的html文件

    这里最主要的一个webView的方法是:loadHTMLString:baseURL: 把HTML文件的内容以字符串的形式加载到webView里面,然后解析。

    // get the model which is a html file for the webView
    NSString * htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    NSString * htmlCont = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
    
    // load the html file to webView
    [_webView loadHTMLString:htmlCont baseURL:nil];
    
    

    通过上述方法,很方便的就能把一个HTML文件加载到webView中,很简单吧,接下来,来点进阶功能!

    在webView中引入本地的image文件

    这个功能的实现,很大程度上是借鉴了这篇文章:UIWebView – Loading External Images and CSS。大家可以去看看这篇文章,或者看我下面的继续描述。

    这个功能的实现是承接上面那个方法的进一步扩展,最关键的是那个baseURL。先看实现代码:

    // get the model which is a html file for the webView
    NSString * htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    NSString * htmlCont = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
        
    // 获取当前应用的根目录
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSURL *baseURL = [NSURL fileURLWithPath:path];
        
    // 通过baseURL的方式加载的HTML
    // 可以在HTML内通过相对目录的方式加载js,css,img等文件
    [_webView loadHTMLString:htmlCont baseURL:baseURL];
    
    
    

    在object-c里面通过如上面的方式加载HTML文件,指定了baseURL的值为程序的bundlePath,然后在HTML文件里面就可以自由的通过直接书写标签的方式加载图片图片文件了

    ;
    

    要注意的是:所有在应用内的资源文件都是在baseURL的根目录也就是此代码中的bundlePath的根目录,所以图片资源,不管在项目里面放在哪个目录结构下,在HTML内引用的时候,都是直接根目录的。

    baseURL到底是什么东西?对此,我也很好奇,所以我NSLog了代码里面的baseURL,然后得到的结果是:file:///Users/(用户名)/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/(一些大写字母加连字符加数字的序列号)/(应用名).app/ 。然后我在终端里面找到这个目录,打开一看,发现都是一些HTML,image,txt等静态资源。

    bundlePath和其中的内容展示

    至此,在webView中插入本地image资源的功能已经实现了,下面是更有挑战性的功能:添加js文件

    添加本地js文件到webView中

    这个实现说起来其实很简单,因为不需要任何代码层面上的修改,只需要按上面添加image的方式,在script的src里面直接写js的文件名即可。

    但是如果直接这样写,你就会发现js资源根本没有被加载。到底image和js有什么区别?看上面的图片,可以看到默认在bundlePath里面是没有我引入到工程里面的jquery.js和scrollLoading.js的。那么,这个是不是导致js资源没有被正确加载的原因?

    在这篇文章:How to load a local .CSS file & JavaScript resources using iPhone UIWebView Class和这篇文章iPhone基于lightbox的图片放大特效和网页布局中,都提及到一个

    Select .js file and in the “Detail” view unselect the bullseye column indicating it is compiled code

    In the “Groups & files” view expand the “Targets” tree and expand the application then go to “Copy Bundle Resources” and drag the *.js files into it.

    方法是有了,可是这种英文的描述,还没有附加图片,实在是让人看不懂,大致知道的就是:js文件在xcode里面,默认是一种需要被编译的文件,这就导致它不会被放到我们刚刚放到的BundlePath(更专业的名称应该是Bundle Resources)里

    所以要解决的问题是,怎样才能使得js文件不被编译并且放到Bundle Resources中。

    期间为了理解上面那两句英文而Google的经历就不说了,直接说结果吧。

    在xcode里面,每个project都有至少一个Targets(多个的也有,但是我不懂),在Targets里面(打开Targets的方式是在左侧栏,点击project,在中间的内容区,就会出现project和Targets),存放了一些资源文件

    Build Phases下可以看到,跟本次内容关联最大的有两项:Compile SourcesCopy Bundle Resources

    在没修改的情况下,展开Compile Sources就能看到找了很久的jquery.js和scrollLoading.js

    打开Targets(基于xcode5的界面)
    打开Targets(基于xcode5的界面)

    展开Compile Sources后能看到两个js文件
    展开Compile Sources后能看到两个js文件

    接下来要做的很简单,从Compile Sources中删除两个js文件,再在Copy Bundle Resources中添加这两个文件,一切搞定。

    想来(偷懒,不想Google继续深入了解了),Compile Sources是放置那些需要被编译的文件,.h,.m和冤枉的.js文件等等,而Copy Bundle Resources里面放的是一些资源文件,在程序在运行时会引入的,同时在项目打包之后也依旧存在的文件。

    其他格式的资源文件,在添加的时候也大致就是这个流程,不重复说了。

    说完了,就这么多了,也欢迎补充一些我说的不全面或者遗漏的地方,毕竟我还是个新手

    展开全文
  • Swift与Js通过WebView交互

    千次阅读 2017-01-04 09:45:16
    开发环境:Swfit 2.3 XCode 8.2 基础概念 JSContext, JSContext是代表JS的执行环境,通过-evaluateScript:方法就可以执行一JS代码 JSValue, JSValue封装了JS与ObjC中的对应的类型,以及调用JS的API等 JSExport, ...

    开发环境:Swfit 2.3 XCode 8.2

    基础概念

    • JSContext, JSContext是代表JS的执行环境,通过-evaluateScript:方法就可以执行一JS代码
    • JSValue, JSValue封装了JS与ObjC中的对应的类型,以及调用JS的API等
    • JSExport, JSExport是一个协议,遵守此协议,就可以定义我们自己的协议,在协议中声明的API都会在JS中暴露出来,才能调用

    Swift代码

    
    import UIKit
    import JavaScriptCore
    
    // 这里必须使用@objc,因为JavaScriptCore库是ObjectiveC版本的。如果不加@objc,则调用无效果
    @objc protocol VideoJsDelegate:JSExport {
        func playLog(videoId:String)
        func existsCollectVideo(collectId:String, _ handleName:String, _ typeStr:String)
    }
    
    @objc class VideoJsModel: NSObject, VideoJsDelegate {
        var jsContext:JSContext!
        func playLog(videoId:String) {
            print(videoId)
        }
    
        func existsCollectVideo(collectId:String, _ handleName:String, _ typeStr:String) {
            // 回调JS里定义的函数
            let handleFunc = self.jsContext.objectForKeyedSubscript(handleName)
            let dict = ["type": typeStr, "status": false]
            handleFunc?.callWithArguments([dict])
        }
    }
    
    class YoukuViewController: UIViewController, UIWebViewDelegate {
    
        var jsContext:JSContext!
    
        @IBOutlet weak var web: UIWebView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let url = "http://weixin.leijiaocn.com"
            let nsUrl = NSURL(string: url)
            self.web.loadRequest(NSURLRequest(URL: nsUrl!))
            self.web.delegate = self
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    
    
        // MARK: 绑定JS交互事件
        func webViewDidFinishLoad(webView: UIWebView) {
            self.jsContext = webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as! JSContext
            let model = VideoJsModel()
    
            model.jsContext = self.jsContext
            // 将jiajiao100app注入到JS中,在JS让jiajiao100app以对象的形式存在
            self.jsContext.setObject(model, forKeyedSubscript: "jiajiao100app")
    
            let curUrl = webView.request?.URL?.absoluteString    //WebView当前访问页面的链接 可动态注册
            self.jsContext.evaluateScript(try? String(contentsOfURL: NSURL(string: curUrl!)!, encoding: NSUTF8StringEncoding))
    
            self.jsContext.exceptionHandler = { (context, exception) in
                print("exception:", exception)
            }
        }
    }
    
    

    html代码

    var existsCollectVideo = function() {
        if(window.jiajiao100app) {
            window.jiajiao100app.existsCollectVideo(albumId, "VideoCollectionHandle", "existsCollectVideo");
        }
    };
    
    var playLog = function(str) {
        if(window.jiajiao100app) {
            window.jiajiao100app.playLog(str);
        }
    };
    
    var VideoCollectionHandle = function(d) {
        alert(d.status);
    };
    
    existsCollectVideo();
    
    playLog("hello world");

    参考文章

    展开全文
  • 项目需求 最近开发的项目,需要一个webView,同时这个webView会需要引入一些...jquery.js,scrollLoading.js 也是本地的,实现滚动加载图片功能 然后就开始了漫长的Google历程。 在webView中引入本地的html文

    项目需求

    最近开发的项目,需要一个webView,同时这个webView会需要引入一些项目中的资源:

    • 一个本地的html文件,作为webView的模板
    • 两张loading图片,在图片未加载的时候进行占位
    • jquery.js,scrollLoading.js 也是本地的,实现滚动加载图片功能

    然后就开始了漫长的Google历程。

    在webView中引入本地的html文件

    这里最主要的一个webView的方法是:loadHTMLString:baseURL: 把HTML文件的内容以字符串的形式加载到webView里面,然后解析。

    
    // get the model which is a html file for the webView
    NSString * htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    NSString * htmlCont = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
    
    // load the html file to webView
    [_webView loadHTMLString:htmlCont baseURL:nil];
    

    通过上述方法,很方便的就能把一个HTML文件加载到webView中,很简单吧,接下来,来点进阶功能!

    在webView中引入本地的image文件

    这个功能的实现,很大程度上是借鉴了这篇文章:UIWebView – Loading External Images and CSS。大家可以去看看这篇文章,或者看我下面的继续描述。

    这个功能的实现是承接上面那个方法的进一步扩展,最关键的是那个baseURL。先看实现代码:

    
    // get the model which is a html file for the webView
    NSString * htmlPath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    NSString * htmlCont = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
        
    // 获取当前应用的根目录
    NSString *path = [[NSBundle mainBundle] bundlePath];
    NSURL *baseURL = [NSURL fileURLWithPath:path];
        
    // 通过baseURL的方式加载的HTML
    // 可以在HTML内通过相对目录的方式加载js,css,img等文件
    [_webView loadHTMLString:htmlCont baseURL:baseURL];
    
    

    在object-c里面通过如上面的方式加载HTML文件,指定了baseURL的值为程序的bundlePath,然后在HTML文件里面就可以自由的通过直接书写标签的方式加载图片图片文件了

    <img src="loading.png" />;

    要注意的是:所有在应用内的资源文件都是在baseURL的根目录也就是此代码中的bundlePath的根目录,所以图片资源,不管在项目里面放在哪个目录结构下,在HTML内引用的时候,都是直接根目录的。

    baseURL到底是什么东西?对此,我也很好奇,所以我NSLog了代码里面的baseURL,然后得到的结果是:file:///Users/(用户名)/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/(一些大写字母加连字符加数字的序列号)/(应用名).app/ 。然后我在终端里面找到这个目录,打开一看,发现都是一些HTML,image,txt等静态资源。

    bundlePath和其中的内容展示

    至此,在webView中插入本地image资源的功能已经实现了,下面是更有挑战性的功能:添加js文件

    添加本地js文件到webView中

    这个实现说起来其实很简单,因为不需要任何代码层面上的修改,只需要按上面添加image的方式,在script的src里面直接写js的文件名即可。

    但是如果直接这样写,你就会发现js资源根本没有被加载。到底image和js有什么区别?看上面的图片,可以看到默认在bundlePath里面是没有我引入到工程里面的jquery.js和scrollLoading.js的。那么,这个是不是导致js资源没有被正确加载的原因?

    在这篇文章:How to load a local .CSS file & JavaScript resources using iPhone UIWebView Class和这篇文章iPhone基于lightbox的图片放大特效和网页布局中,都提及到一个

    Select .js file and in the “Detail” view unselect the bullseye column indicating it is compiled code

    In the “Groups & files” view expand the “Targets” tree and expand the application then go to “Copy Bundle Resources” and drag the *.js files into it.

    方法是有了,可是这种英文的描述,还没有附加图片,实在是让人看不懂,大致知道的就是:js文件在xcode里面,默认是一种需要被编译的文件,这就导致它不会被放到我们刚刚放到的BundlePath(更专业的名称应该是Bundle Resources)里

    所以要解决的问题是,怎样才能使得js文件不被编译并且放到Bundle Resources中。

    期间为了理解上面那两句英文而Google的经历就不说了,直接说结果吧。

    在xcode里面,每个project都有至少一个Targets(多个的也有,但是我不懂),在Targets里面(打开Targets的方式是在左侧栏,点击project,在中间的内容区,就会出现project和Targets),存放了一些资源文件

    Build Phases下可以看到,跟本次内容关联最大的有两项:Compile SourcesCopy Bundle Resources

    在没修改的情况下,展开Compile Sources就能看到找了很久的jquery.js和scrollLoading.js

    打开Targets(基于xcode5的界面)
    打开Targets(基于xcode5的界面)

    展开Compile Sources后能看到两个js文件
    展开Compile Sources后能看到两个js文件

    接下来要做的很简单,从Compile Sources中删除两个js文件,再在Copy Bundle Resources中添加这两个文件,一切搞定。

    想来(偷懒,不想Google继续深入了解了),Compile Sources是放置那些需要被编译的文件,.h,.m和冤枉的.js文件等等,而Copy Bundle Resources里面放的是一些资源文件,在程序在运行时会引入的,同时在项目打包之后也依旧存在的文件。

    其他格式的资源文件,在添加的时候也大致就是这个流程,不重复说了。

    展开全文
  •  一个webview加载本地css以及js文件的例子。点击”Click me“触发的动作是调用本地js文件完成的。 小编注:感谢@贺坤Smaile 上传代码于Code4App。 Code4App编译测试,适用环境:Xcode 4.3, iOS 5.0。
  • HTML、JS、CSS的Web三件套,时下占据了项目的主要业务部分,原生和JS的交互必不可少,下面总结iOS调试Webview的两种方法: 一、Safair浏览器调试方法 1.在手机设置里,找到Safair浏览器,在高级里启用Web检查器; ...
  • 由于Xcode8发布之后,编译器开始不支持iOS 7了,这样我们的app也改为最低支持iOS 8.0,既然需要与web交互,那自然也就选择使用了 iOS 8.0之后 才推出的新控件 WKWebView. 相比与 UIWebView, WKWebView 存在很多优势...
  • 在 Mac Webview 中 Objective-c 与 JS 交互

    千次阅读 2016-12-13 15:32:48
    http://blog.eqoe.cn/posts/mac-webview-js-oc.html 本文为您图文演示如何在 OC 中注册或运行 JS 函数,以实现网页与程序的交互。 1. 首先我们创建一个 XCode 项目; 2. 添加WebView 到ViewController中, ...
  • 1.问题描述2.react-native-webview3.rn工程根目录新建bundle文件夹4.ios部分xcode植入静态项目5.android部分assets放置buildGradle 添加如下6.rn webview书写如下 1.问题描述 项目中会遇到我们需要嵌套前端页面进入...
  • Xcode: 9.2/9C40b - /usr/bin/xcodebuild npmPackages: react: 16.6.0-alpha.8af6728 => 16.6.0-alpha.8af6728 react-native: 0.57.3 => 0.57.3 npmGlobalPackages: react-native-cli: 2.0.1 ...
  • JavaScript与WebView交互框架设计

    千次阅读 2018-07-11 16:44:12
    现在最新的xcode都只支持iOS8.0以上的版本了,所以iOS应该直接使用性能高、功能多的WKWebView接口。UIWebView的注入对象方式需要依赖KVC,且有坑,不建议使用。本文都以WKWebView的接口来设计。 数据从native传递到...
  • iOS Webview 与 app交互

    2014-03-21 11:22:00
    有时候我们在内嵌的webview中希望点击一个链接之后,触发iOS原生事件,而不是webview内页面跳转(因为webview的跳转很生硬,而ajax+js模拟则不如原生segue平滑)。 有时候我们希望在页面内consloe.log('log ...
  • Xcode: 9.4.1/9F2000 - /usr/bin/xcodebuild npmPackages: react: ^16.4.1 => 16.4.1 react-native: ^0.56.0 => 0.56.0 npmGlobalPackages: react-native-cli: 2.0.1 react-native-git-upgrade...
  • Xcode: 10.0/10A255 - /usr/bin/xcodebuild npmPackages: react: 16.5.0 => 16.5.0 react-native: 0.57.0 => 0.57.0 npmGlobalPackages: create-react-native-app: 1.0.0 react-native-cli: ...
  • m using a workaround involving <code>react-native.config.js</code> and a pair of <code>metro.config.js</code> files for the two react-native implementations. <p>For the first iteration of the PR I'...
  • Xcode: Xcode 9.2 Build version 9C40b Android Studio: 3.0 AI-171.4443003 <p>Packages: (wanted => installed) react: 16.3.1 => 16.3.1 react-native: 0.55.4 => 0.55.4 <p>Description I ...
  • 简单的通用Webview应用程序 这是Xcode 6 Universal项目,可让您将网站或网络应用包装在一个超级简单的iOS应用中。 设置 克隆此存储库,或在Github侧栏中点击“下载ZIP”。 本地模式(推荐) 用您自己的移动网站替换...
  • IOS webView:didFailLoadWithError - -1004: Could not connect to the server." <p>--------------------------------------- CODE EXAMPLE -------------------------------------- Index....
  • PhoneGap-1.3.0.js 1.首先打开xcode建立基于PhoneGap的项目(名称Demo),之后将www目录添加到工程。完成之后在模拟器中测试是否成功,成功继续; 2.在xcode界面左侧列表,删除PhoneGapLib.framework,之后选中项目...
  • 关于JS与OC交互的简单总结

    千次阅读 2014-05-05 20:12:50
    虽然Xcode中自带webView的  [webView stringByEvaluatingJavaScriptFromString:@"myFunction();"]; zhe
  • 标签: javascript objective-c 交互 ios开发 uiwebview 分类: Xcode/iOS/MacOS很多关于objc 与 js 交互的文章都比较适用于 mac开发,iOS的webview 还是有所不一样,参考:...
  • Xcode: 11.3.1/11C504 - /usr/bin/xcodebuild npmPackages: expo: ~36.0.0 => 36.0.2 react: ~16.9.0 => 16.9.0 react-native: ...
  • <div><p><strong>Description: When running <code>ionic cordova build ios, <code>ionic ... Xcode : Xcode 11.3.1 Build version 11C504 </code></pre>该提问来源于开源项目:ionic-team/ionic-cli</p></div>
  • Screen captures, and/or native logs(such as Logcat, xcode logs) are appreciate. Giving much information, you are waiting time is less. Thank you for your cooperation. </code></pre>该提问来源于开源...
  • in RNCWKWebView (at WebView.ios.js:288) in RCTView (at View.js:35) in View (at WebView.ios.js:291) in WebView (at CredoWebView.js:98) in RCTView (at View.js:35) in View (at CredoWebView.js:92) ...
  • Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8080/plugins/cordova-plugin-googlemaps/www/promise-7.0.4.min.js.map</p> </li></ol>该提问来源于开源项目&#...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 231
精华内容 92
热门标签
关键字:

jswebviewxcode