当前位置: 首页 > 面试题库 >

Swift中的UIWebView和JavaScriptInterface

公良浩邈
2023-03-14
问题内容

如何创建从我的网站到UIWebView的JavascriptInterface通道?

Android中的示例:

webView.addJavascriptInterface(new WebAppInterface(this), "Android");

我想从这个JavascriptInterface绘制方法,例如:

func webViewDidStartLoad(webView: UIWebView)

要么

myActivityIndicator.startAnimating()

我能怎么做?


问题答案:

对于WKWebView:源在这里

的JavaScript

function callNativeApp () {
    try {
            webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript");
    } catch(err) {
            console.log('The native context does not exist yet');
    }
}

迅速

import WebKit
class ViewController: UIViewController, WKScriptMessageHandler {

    @IBOutlet var containerView: UIView? = nil

    var webView: WKWebView?

    override func loadView() {
        super.loadView()

        let contentController = WKUserContentController()
        contentController.addScriptMessageHandler(self, name: "callbackHandler")
        let config = WKWebViewConfiguration()
        config.userContentController = contentController

        self.webView = WKWebView( frame: self.containerView!.bounds, configuration: config)
        self.view = self.webView

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        //I use the file html in local
        let path = NSBundle.mainBundle().pathForResource("index", ofType: "html") 
        let url = NSURL(fileURLWithPath: path!)
        let req = NSURLRequest(URL: url)
        self.webView!.loadRequest(req)

    }

    func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) {// edit: changed fun to func
        if (message.name == "callbackHandler"){
            print("\(message.body)")
        }
    }

}

对于UIWebView:此处来源

HTML中的JavaScript

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script>
        (function(){
            $(window).load(function(){

               $('.clickMe').on('click', function(){
                   window.location = "foobar://fizz?Hello_from_javaScript";
               });
            });
         })(jQuery);
    </script>

迅速

import UIKit
class ViewController: UIViewController, UIWebViewDelegate {

    @IBOutlet weak var Web: UIWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

    let path = NSBundle.mainBundle().pathForResource("index", ofType: "html")
        let url = NSURL(fileURLWithPath: path!)
        let req = NSURLRequest(URL: url)
        Web.delegate = self
        Web.loadRequest(req)
    }

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        if request.URL?.query != nil {
            print("\(request.URL!.query!)")
        }
        return true
    }

}


 类似资料:
  • 问题内容: 我有以下代码: 我收到以下错误: “ NSURLRequest”不可转换为UIWebView。 知道是什么问题吗? 问题答案: loadRequest:是实例方法,不是类方法。您应该尝试使用UIWebview的实例作为接收者而不是类本身来调用此方法。 但是,正如@radex在下面正确指出的那样,您还可以利用currying来调用如下函数: 斯威夫特5

  • 问题内容: 所以我目前正在尝试显示我在UIWebview中拥有的本地PDF,这是我正在使用的代码: 该代码将成功构建,但是当我运行该应用程序时,它将崩溃并显示以下错误:线程1:EXC_BAD_INSTRUCTION(code = EXC-I386_INVOP,subcode = 0x0) 我已经找到了一些有关如何执行此操作的教程,但是它们都已经过时或在Objective-C中。 问题答案: 干得好

  • 我目前使用的是Xcode 8.3.3,如果我使用的是UIWebView,我会遇到这个错误,您可以在下面看到,然后在某些项目中或某些时候WebView不工作,而在其他项目中它会工作。我已经用一个空项目对它进行了测试,是的,是UIWebView导致了这些问题。 objc[11182]:类PLBuildVersion在/Applications/xcode . app/Contents/Develope

  • 问题内容: 关于一个主题,人们可以使用新语言Swift轻松查看如何在Web视图中管理Cookie呢?如果您在Internet上签到,则在需要实现此功能时不会发现任何有趣的东西。甚至苹果公司的文件也很差。 有人知道如何在Swift中处理这些过程吗?这是我在Obj-C中找到的: 查看存储的Cookie 删除存储的Cookie 如果我们能给出一次答案的话,对每个人都很好!干杯! 问题答案: 试试这个代码

  • 问题内容: 我将Xcode 6用于带有Swift的iOS应用。我有一个带有嵌入式UIWebView的简单ViewController。您可以在下面找到代码。现在,我想更改HTTP标头。我尝试使用的方法,但没有用(请参见未注释的行)。有谁知道这是怎么做到的吗? 问题答案: 这将更改通过“正常”堆栈进行的任何呼叫的代理。 斯威夫特2: 斯威夫特3:

  • 问题内容: 今天早上,这使我发疯。我想将一些本地html加载到Web视图中: 该html文件位于我的项目的根文件夹中,但位于组中。Webview对我来说是空白的。有什么想法怎么了?我正在使用xcode 6.1并在iPhone 6上运行此示例。 问题答案: 要检索应用程序资源的URL,应使用类的方法。 迅捷2 迅捷3