TL; DR:我需要实现在多个ViewControllers之间共享的单例UIWebVIew.这个问题包含了我迄今为止的所有方法.
的appDelegate:
@property (strong, nonatomic) UIWebView *singleWebView;
Run Code Online (Sandbox Code Playgroud)
firstViewController:
@property (weak, nonatomic) IBOutlet UIWebView *webView;
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear: animated];
NSLog(@"Removing webview from the first VC");
[self.webView removeFromSuperview];
self.webView.delegate = nil;
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
appDelegate.singleWebView = self.webView;
self.webView = nil;
}
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *URL = [request URL];
if ([[URL absoluteString] isEqualToString:@"myapp://postsShow"]) {
[self performSegueWithIdentifier:@"postsShowSegue" sender:self];
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
PostsShowViewController
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
AppDelegate *appDelegate = …
Run Code Online (Sandbox Code Playgroud) 为什么我不能在下面的例子中使$(frame)成为jQuery对象?以下是我的chrome开发人员工具的输出.
console: mainFrame
output: <frame src=?"http:?/?/someurl.com" name=?"mainFrame">?
console: $(mainFrame).contents()
output: SyntaxError: Failed to execute 'querySelector' on 'Document': '[object HTMLFrameElement]' is not a valid selector.
Run Code Online (Sandbox Code Playgroud)
编辑:
回应评论......
$.toString()
"function $(selector, [startNode]) { [Command Line API] }"
typeof(mainFrame)
"object"
jQuery
ReferenceError: jQuery is not defined
Run Code Online (Sandbox Code Playgroud) 目前的omniauth-facebook似乎有一些问题,我想知道是否有人对它们有答案.
第一个问题是无效的凭证问题.由于此问题,我无法使用客户端授权登录我的应用程序.但是,这可以通过将facebook-omniauth降级到1.4.0版本来解决.(参考)
但是,现在我遇到第二个问题,NoAuthorizationCodeError,错误消息:
OmniAuth Strategies Facebook NoAuthorizationCodeError
(must pass either a `code` parameter or a signed request
(via `signed_request` parameter):
Run Code Online (Sandbox Code Playgroud)
这是在这里被问到的,但是接受的答案建议再次实际升级到1.4.1版本,这将使先前的无效凭证问题再次发生.所以这对我来说不是一个选择.
NoAuthorizationCodeError
当我尝试通过Internet Explorer登录Facebook iFrame(从应用程序中心搜索我的应用程序)内的应用程序时,会发生这种情况.在chrome或firefox上一切正常.还有一个github问题确切地指出了这个问题,但还没有人提出答案.我也尝试降级到omniauth-facebook 1.3.0版本,但它没有任何区别.我也尝试传递signed_request
如下参数:
window.location = '/auth/facebook/callback',
{ signed_request: response.authResponse.signedRequest }
Run Code Online (Sandbox Code Playgroud)
但是,它没有任何区别(在IE上,错误仍然存在),我不确定这是否是将代码作为参数传递的正确方法(我该如何检查?)
我假设我的设置没有问题.我真的很感激这方面的任何帮助.
更新:
我升级到1.4.1版本没有无效的凭据问题,但当我通过Internet Explorer访问Facebook内的应用程序时仍然会出现NoAuthorizationCodeError.检查我的Github 问题.
更新:
我降级到1.4.0版本,并添加了signedRequest params.
<script>
function login() {
FB.login(function(response) {
if (response.authResponse) {
window.location = '/auth/facebook/callback?' + $.param({ signed_request: response.authResponse.signedRequest })
}
}, {scope: 'email,publish_stream,publish_actions'}); …
Run Code Online (Sandbox Code Playgroud) 我通过以下方式绘制了上面的BezierPath://位置是用户触摸屏幕的位置.//位置将是CGPoint origin = CGPointMake(xStart,620.0)的最大值; CGPoint endpt = CGPointMake(xEnd,620.0); CGPoint midpt1 = midPointForPoints(原点,位置); CGPoint midpt2 = midPointForPoints(location,endpt);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:origin];
[path addQuadCurveToPoint:location controlPoint:CGPointMake(midpt1.x, midpt1.y+50)];
[path addQuadCurveToPoint:endpt controlPoint:CGPointMake(midpt2.x, midpt2.y+50)];
[shapeLayer setPath:path.CGPath];
Run Code Online (Sandbox Code Playgroud)
现在,我想检索位于路径上的某些x坐标的y坐标.例如,给定x = 0.0,我想得到y = 0.0,或者给定x = 300.0,y = 50.0.
我看了一些像这个问题和示例代码的参考文献,我仍然不确定.更新:基本上,我想做这样的事情.
更新:关注 @ Fang的建议:
给出等式
X = (1-t)^2*X0 + 2*t*(1-t)*X1 + t^2 *X2
Run Code Online (Sandbox Code Playgroud)
我解决了
t = ((2.0 * x0 - x1) + sqrt(((-2.0 * x0 + x1) ** 2.0)
- ((4 * (x0 - …
Run Code Online (Sandbox Code Playgroud) 假设我有两个链接:"所有帖子"和"个人".当用户点击"个人"链接时,他应该只看到具有"个人"类别的帖子.现在,液体标签是{% for post in site.posts %}
.我想知道是否有办法site.posts
从javascript 访问变量,以便我可以听取click事件并动态过滤帖子.如果没有,我该怎么办?
我动态地向父div添加一个元素.
$('.some_div').append("<li class="hi">hey!</li>")
Run Code Online (Sandbox Code Playgroud)
在我的CSS中,
.hi {
color: white;
}
Run Code Online (Sandbox Code Playgroud)
但是,由于<li class="hi">
动态添加,因此CSS中定义的样式似乎不适用于该元素.所以,
$('.some_div').append("<li class='hi'>hey!</li>")
$('li.hi').css({"color":"white"});
Run Code Online (Sandbox Code Playgroud)
实际上会做到这一点,但对我来说这似乎是多余的,因为样式已在CSS文件中定义.这是唯一的方法吗?
更新:
$('.some_div').append('<li style="color:white" >hey!</li>')
Run Code Online (Sandbox Code Playgroud)
上面的方法可行,但由于样式已在单独的CSS文件中定义,因此它仍然是多余的.我的问题是,是否有办法避免这种冗余.
在CSS中,
.some_div > li {
font-size: 20px;
background-color: 30px;
margin-right: 2px;
}
.hi {
color: white;
}
Run Code Online (Sandbox Code Playgroud)
当我添加一个新元素时,所有这些都不会应用($).append()
,所以我问是否有办法应用样式表中已经定义的样式,而不必在css()
函数中重新定义它们.
我在用户点击sign in
Chrome应用中的按钮时对用户进行身份验证.这会在Chrome中打开一个新页面,提示他们使用自己的Google帐户登录.然后,弹出窗口打开,询问我的应用程序请求的权限.当他们点击确定,应用程序收到token
- 它一切正常,直到我切换到不同的区域设置.
当我测试在韩国语言环境的应用程序,token
是不确定的一个成功标志后,我进一步调查,我发现我的错误chrome.runtime.identity.getAuthToken: Authorization page could not be loaded
.
extensions::lastError:133 Unchecked runtime.lastError while running identity.getAuthToken: Authorization page could not be loaded.
at chrome-extension://APP_ID/foreground/bundle/app.js:29630:24
at chrome-extension://APP_ID/foreground/bundle/app.js:28068:46
at Object.loadUserPlaylists (chrome-extension://APP_ID/foreground/bundle/app.js:27679:13)
at SidebarPlaylists.onSignInAndLoadUserPlaylists (chrome-extension://APP_ID/foreground/bundle/app.js:42014:19)
at Object.invokeGuardedCallback (chrome-extension://APP_ID/foreground/bundle/app.js:11872:13)
at executeDispatch (chrome-extension://APP_ID/foreground/bundle/app.js:11717:22)
at Object.executeDispatchesInOrder (chrome-extension://APP_ID/foreground/bundle/app.js:11737:8)
Run Code Online (Sandbox Code Playgroud)
这可以防止任何在韩国的用户登录并使用我的Chrome应用.为什么会发生这种情况,我该如何解决?
更新:
添加以下权限不起作用:
"https://*.chromiumapp.org/*", "https://chromiumapp.org/",
"https://*.apps.googleusercontent.com/", "https://apps.googleusercontent.com/",
"https://apps.googleusercontent.com/", "https://apps.googleusercontent.com/",
"https://*.chromiumapp.org/*/*"
Run Code Online (Sandbox Code Playgroud)
UPDATE2:
我尝试使用launchWebAuthFlow()
而不是identity.getAuthToken()
.
chrome.identity.launchWebAuthFlow({
url: "https://accounts.google.com/o/oauth2/v2/auth?scope=email&response_type=token&client_id=MY_CLIENT_ID&redirect_uri="+chrome.identity.getRedirectURL()+"&prompt=consent",
interactive: true
}, function(respUrl) {
//respUrl is empty
debugger;
//getUserPlaylists(token, …
Run Code Online (Sandbox Code Playgroud) 我很好奇在React环境中使用常规javascript库(不是作为React组件编写)的最佳方法是什么.
例如,假设有一个javascript库将一个简单的小部件嵌入到我的网页中.说明如下:
在普通网页中,我会执行以下操作:
<head>
<script src="http://karaoke.com/source.js"></script>
</head>
<body>
<h1>Hello look at my cool widget library</h1>
<karaoke width="600" height="400" />
</body>
Run Code Online (Sandbox Code Playgroud)
如何在这样的React组件中实现相同的效果?
class MainView extends Component {
render() {
return (
<div>
<h1>I want to show my karaoke widget here, but how?</h1>
</div>
);
}
}
Run Code Online (Sandbox Code Playgroud) def paren(n):
lst = ['(' for x in range(n)]
current_string = ''.join(lst)
solutions = list()
for i in range(len(current_string)+1):
close(current_string, n, i, solutions)
return solutions
def close(current_string, num_close_parens, index, solutions):
"""close parentheses recursively"""
if num_close_parens == 0:
if current_string not in solutions:
solutions.append(current_string)
return
new_str = current_string[:index] + ')' + current_string[index:]
if num_close_parens and is_valid(new_str[:index+1]):
return close(new_str, num_close_parens-1, index+1, solutions)
else:
return close(current_string, num_close_parens, index+1, solutions)
def is_valid(part):
"""True if number of open parens >= number of close parens in …
Run Code Online (Sandbox Code Playgroud) 我按照React Form教程创建了以下组件:
export default class SignInForm extends React.Component {
constructor(props) {
super(props)
this.state = {
email: '',
password: ''
}
this.onEmailChange = this.onEmailChange.bind(this)
this.onPasswordChange = this.onPasswordChange.bind(this)
}
onEmailChange(event) {
this.setState({email: event.target.value})
}
onPasswordChange(password) {
this.setState({password: event.target.value})
}
render() {
return (
<form onSubmit={this.props.handleSubmit}>
<div>
<label>Email</label>
<div>
<input type="email"
placeholder="you@gmail.com"
onChange={this.onEmailChange}
value={this.state.email}
/>
</div>
</div>
<div>
<label>Password</label>
<div>
<input type="password"
placeholder="Password"
onChange={this.onPasswordChange}
value={this.state.password}
/>
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
)
}
}
Run Code Online (Sandbox Code Playgroud)
表单呈现后,我收到以下错误:
SignInForm正在更改密码类型的受控输入以使其不受控制.输入元素不应从受控切换到不受控制(反之亦然).决定在组件的使用寿命期间使用受控或不受控制的输入元素
我找不到我把它变成一个不受控制的组件的地方.我究竟做错了什么?
javascript ×4
ios ×2
jquery ×2
reactjs ×2
backtracking ×1
bezier ×1
css ×1
html ×1
jekyll ×1
liquid ×1
objective-c ×1
omniauth ×1
python ×1
recursion ×1
swift ×1
uibezierpath ×1
uiwebview ×1