- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 iOS 上构建混合原生/HTML5 应用程序。作为 native /HTML5 桥的一部分,我正在通过 stringByEvaluatingJavaScriptFromString 执行一些 JavaScript 代码.
我确保从 native 端的主调度队列调用此函数。大多数情况下,对 JavaScript 端的影响是被调用的 JavaScript 代码直接从(JavaScript 堆栈的)顶层调用,即使对 stringByEvaluatingJavaScriptFromString 的多次调用非常接近。
然而,偶尔,我看到有证据表明在方法执行过程中发生了对 stringByEvaluatingJavaScriptFromString 的调用 - 也就是说,例如调用的方法在 stringByEvaluatingJavaScriptFromString 调用的方法开始执行之前,事件处理程序不会返回。
鉴于 JavaScript 是单线程的,这怎么可能?
最佳答案
这个问题困扰了我几个月,我终于有了答案的证据。
虽然 iOS 通常在 JavaScript 堆栈的顶部执行 stringByEvaluatingJavaScriptFromString 调用,但某些系统调用似乎“屈服于”待处理的评估。我特别指出的一个是 XmlHttpRequest.send():如果在调用 send() 时碰巧有未决的评估,send() 将阻塞直到这些评估被执行。可能还有其他人。
如果这种行为是不可取的,您可以通过将 stringByEvaluatingJavaScriptFromString 调用的函数包装在 setTimeout(..., 0) 中来避免代码重入。参见 this question有关此类调用为何有用的背景信息。
编辑:虽然我在写完这篇文章后想到 xhr.send() 会执行任何未决的评估,但不会执行未决的超时,这有点奇怪。我将不得不做更多的实验...
编辑 2:实验表明 xhr.send() 实际上不会执行挂起的超时。这种不一致有点奇怪,但就是这样。
关于javascript - stringByEvaluatingJavaScriptFromString 如何重入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30496369/
我编写应用程序,我需要加载相同的 HTML 页面。比需要采取的元素。 getElementById(\"orderData\") let webView = UIWebView() let
这个表达方式似乎不起作用。它是 Mac 应用程序,而不是 iPhone 应用程序。 [[mainWebView mainFrame] stringByEvaluatingJavaScriptFromS
我正在尝试使用这行代码 [webView stringByEvaluatingJavaScriptFromString:@"test();"]; 但它不起作用。我有多个 javascript 文件,但
我正在开发一个 Objective C 应用程序,它在用户滚动浏览时将大型 HTML 文档加载到 UIWebView 中。这是因为该文档是 20Mb,如果一次加载所有文档,它往往会导致 webview
所以我有以下文件,其中包含以下 javascript (function getradiovalue(myvalue) { alert(myvalue); return myvalue; }) 我的
我已将一个网页加载到我的 UIWebView 中,该页面包含许多输入标签。我想确定看起来像的那个: 你知道我会在 stringByEvaluatingJavaScriptFromString 中写什
我在下面设置了我的 UIWebView 的代码: - (void)webViewDidFinishLoad:(UIWebView *)webView { [webView stringByEv
我正在 iOS 上构建混合原生/HTML5 应用程序。作为 native /HTML5 桥的一部分,我正在通过 stringByEvaluatingJavaScriptFromString 执行一些
我有 WebView 加载 html。缩放后 html -(void)webViewDidFinishLoad:(UIWebView *)webView { [self setupConten
我知道这里已经发布了类似的问题,但我查看了以前的主题,但找不到答案。我正在尝试在 swift 中使用 stringByEvaluatingJavaScriptFromString,但它不起作用。请帮忙
我的应用程序的用户尝试加载的网页包含以下链接: 它尝试调用这个 javascript block : function DoSubmitScr(scrval) { GlobalHelpUrl
我在 iPhone 中使用 UIWebView 并从资源加载一个 HTML 页面。 以下是我的HTML页面代码: function callme(id) { var input =
我坚持让一些非常基本的 JS 在我的 UIWebView 中运行。在 WebView 的委托(delegate)中,我有: - (void)webViewDidFinishLoad:(UIWebVie
我尝试在我的 WebView 上使用一些 javascript 和新的 stringByEvaluatingJavaScriptFromString 函数 我不太熟悉语法,所以我尝试了 func s
我正在尝试从 UIWebView 中加载的本地 html 文件调用 javascript 函数但它没有反应 看起来像这样 NSString *script=[NSString stringWithFo
为什么这段代码不起作用?它显示 Google 屏幕,但不会更改文本框值。我通过在 Safari 中运行 JS 来确认它确实可以工作,并且该代码似乎可以工作,因为运行alert('hi') 确实可以工作
我将 Uiwebview 放置在 UIscrollview 中,因为在 uiwebview 之后我想使用 PageController 显示一些图像。 我正在使用这行代码。 -(void)web
我遇到了一个奇怪的问题。我目前正在 iPhone 上开发 Mapkit。我需要在 map 中显示两条路线,其中有一个源城市和两个不同的目的地。对于两个城市之间的路线,我的代码很好。为此,我在代码中的一
我正在尝试实现一个相对简单的结果 - 在加载页面时关注文本框。我使用这段代码: [_webView setKeyboardDisplayRequiresUserAction:NO]; NSString
在我的 iOS 应用程序(一种闪存卡应用程序)中,我使用 UIWebView ,一旦 webview 内容加载完成,我需要执行一些 UI 操作(更改)。 我正在 webViewDidFinishLoa
我是一名优秀的程序员,十分优秀!