gpt4 book ai didi

ios - 我如何知道什么时候已将某些内容粘贴到 UIWebView 中?

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:09:09 25 4
gpt4 key购买 nike

我有一个 UIWebView,它加载一个 HTML 字符串,并且可以使用 Javascript 添加内容。

有什么方法可以知道何时将某些内容(文本或图像)粘贴到 WebView 中。

NSString *path = [[NSBundle mainBundle] pathForResource:@"htmlString" ofType:@"txt"];
NSString *htmlString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
[self.ibWebView loadHTMLString:htmlString baseURL:nil];


- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSString *jsToEncloseInEditableContainer = [NSString stringWithFormat:@"function contentedited(e){window.location='mpscontentedited://' + e.keyCode;};(function() {var body = document.body;var contentContainer = document.createElement('div');contentContainer.id = 'content';contentContainer.setAttribute('contenteditable','true');contentContainer.style.fontFamily=' Helvetica';contentContainer.style.marginTop=\"15px\";contentContainer.onkeydown = contentedited;contentContainer.onpaste=contentedited;var node;while(node=body.firstChild) {contentContainer.appendChild(node);}body.appendChild(contentContainer);%@body=undefined;delete body;contentContainer=undefined;delete contentContainer;node=undefined;delete node;})();", @"contentContainer.focus();"];
[self.ibWebView stringByEvaluatingJavaScriptFromString:jsToEncloseInEditableContainer];
}

我已经尝试覆盖 UIResponder 的 paste: 方法,但它从未被调用。

- (void)paste:(id)sender
{
NSLog(@"paste not called");
}

我还尝试创建一个自定义菜单按钮

UIMenuController *menu = [UIMenuController sharedMenuController];
UIMenuItem *item = [[UIMenuItem alloc] initWithTitle:@"Paste Custom" action:@selector(pasteCustom:)];
[menu setMenuItems:@[item]];
[menu setMenuVisible:YES];

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
if (action == @selector(pasteCustom:))
{
return YES;
}
return [super canPerformAction:action withSender:sender];
}

- (void)pasteCustom:(id)sender
{
NSLog(@"paste custom");
[super paste:sender]; // --> calling this causes a crash (unrecognized selector sent to instance)
}

我做错了什么?

我要么想知道何时粘贴了某些内容,要么我想要一个行为类似于默认粘贴按钮的自定义菜单按钮。

提前致谢。

最佳答案

类型转换不是魔法。

我再说一遍:转换不是魔法!

它不会改变对象的运行时类型。如果它不作为 UIWebView 响应选择器,它也不会作为 UIMenuItem 响应它。您必须使用 JavaScript 检测事件并将您的 JavaScript 函数桥接到 Objective-C。使用 onpaste JavaScript 事件处理程序,然后执行类似于描述的操作 here :

<!-- snippet from your HTML string -->
<script type="text/javascript">

function call_objc_paste(text)
{
window.location.href = "fakescheme://" + text;
}

</script>

<input type="text" onpaste="call_objc_paste(this.value);" />

// Objective-C code:
webView.delegate = self;
[webView loadHTMLString:htmlStr baseURL:nil];

- (BOOL) webView:(UIWebView *)wv
shouldStartLoadWithRequest:(NSURLRequest *)rq
navigationType:(UIWebViewNavigationType)navT
{
NSString *rqStr = rq.URL.absoluteString;
NSString *scheme = @"fakescheme://";
if ([rqStr hasPrefix:scheme]) {
NSString *pastedText = [rqStr substringFromIndex:scheme.length];
// potentially do somethin with pastedText, then

return NO;
}

// it's not our fake URL scheme, just normal navigation
return YES;
}

关于ios - 我如何知道什么时候已将某些内容粘贴到 UIWebView 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18317194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com